(1)Shell腳本編程基礎之邏輯判斷和腳本測試

最近小白學習了shell腳本的基礎編程,感覺有必要對最近所學知識進行一 次簡單的總結,所以寫了這一篇博客,可能會有所不足。請大家指正,后期在學習過后,會進行完善的。
下面先說下shell登陸的兩種方式

交互式登錄:

(1) 直接通過終端輸入賬號密碼登錄
(2) 使用“su - UserName” 切換的用戶
執(zhí)行順序:/etc/profile --> /etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登錄:

(1)su UserName
(2) 圖形界面下打開的終端
(3) 執(zhí)行腳本
(4) 任何其它的bash 實例
執(zhí)行順序: ~/.bashrc --> /etc/bashrc -->/etc/profile.d/*.sh

關于bash配置文件生效范圍

  • 全局配置:

     /etc/profile
     /etc/profile.d/*.sh
     /etc/bashrc
    
  • 個人配置:

      ~/.bash_profile
      ~/.bashrc
    

一、創(chuàng)建Shell腳本

利用vim等文本編輯工具創(chuàng)建文本文件 第一行必須包括shell 聲明序列:#!
例如:

#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl      
  • shell 腳本的用途:

    • 1、 自動化執(zhí)行常用命令
    • 2、執(zhí)行系統(tǒng)管理和故障排除
    • 3、 創(chuàng)建簡單的應用程序
    • 4、創(chuàng)建文本或者文件

二、運行腳本文件

首先先給予文本文件權限:

  chmod +x $name.sh

直接運行腳本文件./$PATH/$name.sh或者$shell ./$PATH/$name.sh,接下來就是小白簡單寫了一個簡單的腳本文件格式:
#!/bin/bash
[ $# -gt 1 ] && { echo " must be a arg ";exit;}
[ $# == 0 ] && read -p "please input script name: " name || name=$1
[ -e $name ] && { echo "the file is exist , please return the script and input another name"; exit ; }
touch $name
echo "#!/bin/bash
# author:wangnan
# mailbox:*********@163.com
# QQ:********
# blog:http://www.itdecent.cn/u/fb9ec5da4a64
# description:this is for wang
# echo " Your working directory is: $(pwd) "
# date date">"$name"
chmod +x "$name"
vim $name
unset name
這個腳本的功能是創(chuàng)建腳本模板,首先是判斷運行腳本時是否后加參數(shù),不加的話就退出,加的話,判斷是否名字相同,相同的話重新命名另外一個名字,之后自動添加執(zhí)行權限,并打開該腳本,unset

三、調試腳本

檢測腳本中的語法錯誤

bash -n /$PATH/$name.sh

調試執(zhí)行

bash -x /$PATH/$name.sh

四、邏輯運算

與運算
1 與 與 1 = 1
1 與 與 0 = 0
0 與 與 1 = 0
0 與 與 0 = 0

或運算
1 或 或 1 = 1
1 或 或 0 = 1
0 或 或 1 = 1
0 或 或 0 = 0

非運算 !
! 1 = 0
! 0 = 1

短路運算

短路與
&& 代表條件性的AND THEN
第一個為0 ,結果必定為0
第一個為1 ,第二個必須要參與運算

短路或
|| 代表條件性的OR ELSE
第一個為1 ,結果必定為1
第一個為0 ,第二個必須要參與運算
異或:^
異或的兩個值, 相同為假,不同為真

grep -q no_such_user /etc/passwd || echo 'No such user'
ping -c1 -W2 station1 &> /dev/null&& echo "station1 is up" || (echo 'station1 is unreachable'; exit 1)

五、利用 test 指令的測試功能

當我要檢測系統(tǒng)上面某些文件或者是相關的屬性時,利用 test 這個指令, 舉例來說,我要檢查 /testfile 文件是否存在時,使用:

test -e /testfile

執(zhí)行結果并不會顯示任何訊息,但最后我們可以通過 $? 或 && 及 || 來展現(xiàn)整個結果呢! 例如我們在將上面的例子改寫成這樣:

 test -e /testfile && echo "exist" || echo "Not exist"

最終的結果可以告知我們是“exist”還是“Not exist”呢!那我知道 -e 是測試一個“文件”是否存在,如果還想要測試一下,還有很多選項可以供我們選擇!

  • 文件測試
測試的標志 代表意義
-e(同-a) 該“文件名”是否存在?
-f 該“文件名”是否存在且為文件(file)
-d 該“文件名”是否存在且為目錄(directory)
-c 是否存在且為字符設備文件(character device)
-d 是否存在且為目錄文件
-f 是否存在且為普通文件
-h(或-L) 存在且為符號鏈接文件
-p 是否存在且為套接字文件
-r 是否存在且可讀
-w 是否存在且可寫
-x 是否存在且可執(zhí)行
-u 是否存在且擁有suid 權限
-g 是否存在且擁有sgid 權限
-k 是否存在且擁有sticky 權限
-s 是否存在且非空
-t fd fd表示文件描述符是否已經打開且與某終端相關
-N 文件自動上一次被讀取之后是否被修改過
-O 當前有效用戶是否為文件屬主
-G 當前有效用戶是否為文件屬組
  • 字符串測試
測試的標志 代表意義
== 是否等于;
> ascii 碼是否大于ascii碼
< 是否小于
!= 是否不等于
=~ 左側字符串是否能夠被右側的PATTERN所 所 匹配()Ps: 此表達式一般用于[[ ]] 中;擴展的正則表達式)
-z 字符串是否為空,空為真,不空為假
-n 字符串是否不空,不空為真,空為假
  • 數(shù)值測試
測試的標志 代表意義
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否
  • 雙目測試
測試的標志 代表意義
-ef 是否指向同一個設備上的相同inode
-nt 是否新于前一個文件
-ot 是否舊于前一個文件
filetest1   -ef filetest2: filetest1 與filetest2 是否指向同一個設備上的相同inode
filetest1 -nt filetest2: filetest1 是否新于 于filetest2
filetest1 -ot filetest2: filetest1 是否舊于 于filetest2
  • Bash 的組合測試條件

  • 第一種方式:
    COMMAND1 && COMMAND2 并且
    COMMAND1 || COMMAND2 或者
    ! COMMAND 非 非
    如:[[ -r FILE ]] && [[ -w FILE ]]

  • 第二種方式:
    EXPRESSION1 -a EXPRESSION2 并且
    EXPRESSION1 -o EXPRESSION2 或者
    ! EXPRESSION
    必須使用測試命令進行

  • 示例:

[ -z “$HOSTNAME” -o $HOSTNAME "=="localhost.localdomain" ] && hostname www.magedu.com
[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. shell腳本: 包含一些命令或聲明,并符合一定格式的文本文件 ? 格式要求:首行shebang(#!)機制...
    尛尛大尹閱讀 1,996評論 0 1
  • 一、shell腳本介紹 1.1 開頭(環(huán)境使用shebang機制) #!/bin/bash 必須寫在文件首行 符號...
    優(yōu)果馥斯閱讀 3,601評論 0 1
  • Bash內置基本變量 PWD : 顯示當前的工作目錄 OLDPWD : 顯示上一次的工作目錄 ~:用戶家目錄 - ...
    魏鎮(zhèn)坪閱讀 1,662評論 0 6
  • 今天元宵佳節(jié),都說要來一小碗熱氣騰騰的湯圓。湯圓代表團團圓圓,幸福美滿的意思。真好,剛好這個節(jié)日是在周六,很多人...
    __感悟閱讀 315評論 0 2
  • 茂林姓周,是我小學、初中、高中的同班同學,跟我同學關系這么久的就他一人,所以關系一直特別好。讀小學時我就常去他們家...
    樂行居士閱讀 1,331評論 0 1

友情鏈接更多精彩內容