bash腳本的書寫規範簡介shell
看本文須要瞭解的腳本撰寫習慣:bashcentos
開頭頂格寫#!緊接着寫解釋器路徑/bin/bashbash
因爲bash屬於腳本語言,腳本語言的運行方式socket
解釋運行:源代碼 --> 運行時啓動解釋器,由解釋器邊解釋邊運行ide
Linux中的腳本解釋器有:zsh,csh,bash,tsh衆多shell,不過bash最經常使用。測試
第一行寫完以後,就能夠直接寫代碼。不過爲了便於他人閱讀一般會增長以下行:
centos7
第二行:#版本信息spa
第三行:#做者與聯繫方式ip
第四行:#版權宣告方式it
第五行:#History
通常會增長上面4行註釋信息。
注:除第一行#外其他行只要#後內容腳本通通不識別,所以可用#做爲註釋使用。
實驗環境CentOS7.2
bash腳本語句執行順序
bash腳本中分爲順序執行,選擇執行及循環執行這大體三類執行順序。
▲順序執行,就是從上到下,從左到右的順序逐一讀取命令。
▲選擇執行,根據一些條件的真僞狀況分別執行相應的操做。
▲循環執行,根據限制條件及循環體,反覆執行,直到不符合循環條件退出循環爲止。
本文介紹較爲簡單的選擇執行語句
選擇執行語句
選擇執行語句大體分爲if語句與case語句
………………………………………………………………………………………………………………………
if語句
if語句又分爲if單分支語句,if雙分支語句和if多分支語句。
case能夠認爲是if多分支語句的一個特例,由於其格式更加精簡因此在遇到這種特例會使用case。
………………………………………………………………………………………………………………………
if單分支語句
單分支:
if CONDITION; then
if-true
fi
CONDITION:能夠是測試條件,能夠是命令執行結果,若是CONDITION內容爲真,則進入then階段,以後進行相應操做,這個執行操做能夠是命令,也能夠是其餘執行語句。也就是這裏能夠進行語句的嵌套。
該操做結束後,使用fi進行if語句的結尾動做。
………………………………………………………………………………………………………………………
下面舉個簡單例子:寫一個腳本,判斷1與2的大小,1<2則顯示:2 is bigger
[root@localhost test]# cat >> if11 << EOF > #!/bin/bash > # This script is a value test for 1 and 2 > #2016-0828 author chawan > # > if [ 1 -lt 2 ];then > echo "2 is bigger" > fi > EOF [root@localhost test]# chmod +x if11 [root@localhost test]# ./if11 2 is bigger
………………………………………………………………………………………………………………………
if雙分支語句
雙分支:
if CONDITION; then
if-true
else
if-false
fi
雙分支語句跟單分支語句不一樣的地方在於else後面接的是CONDITION爲假時的狀況
同理else後面能夠跟命令也能夠跟語句嵌套。最後以fi結束if語句
………………………………………………………………………………………………………………………
示例:比較兩個數的大小,若是第一個數大於等於第二個數則顯示:First number is bigger,不然顯示:Second number is bigger。
[root@localhost test]# cat if12 #!/bin/bash # Test two number who is bigger #2016-0828 author chawan # [ $# -ne 2 ] && echo "Please give two number !" && exit 1 if [ $1 -ge $2 ];then echo "First number $1 is bigger" else echo "Second number $2 is bigger" fi [root@localhost test]# chmod +x if12 [root@localhost test]# ./if12 Please give two number ! [root@localhost test]# ./if12 3 9 Second number 9 is bigger
………………………………………………………………………………………………………………………
if多分支語句
多分支:
if CONDITION1; then
if-true
elif CONDITION2; then
if-ture
elif CONDITION3; then
if-ture
...
esle
all-false
fi
多分支語句跟雙分支並無什麼大的區別,只是經過elif多了幾個選擇判斷。只要理解了if雙分支的使用,那麼if的多分支就不成問題。
………………………………………………………………………………………………………………………
示例:輸入一個文件的絕對路徑判斷該文件的類型。
#!/bin/bash #version 1.0 #auther chawan #date:20160905 #根據提示信息輸入相應內容 read -p "Please give a path of file :" Path #判斷輸入內容是否爲空,爲空則提示 test -z $Path && echo "No path" && exit 1 #判斷輸入的路徑對應的文件是否存在,若不存在則提示路徑錯誤並退出 ! test -e $Path && echo "Wrong path " && exit 2 #多分支選擇語句,判斷是否爲普通文件,目錄文件及連接文件,其餘類型表示爲不識別。 if [ -f $Path ];then echo "$Path is common file" elif [ -d $Path ];then echo "$Path is diretory file" elif [ -h $Path ];then echo "$Path is link file" else echo "Unknown file type" fi
下面輸入幾個文件路徑進行測試
[root@centos7 test]# sh if_3 Please give a path of file :/ / is diretory file [root@centos7 test]# sh if_3 Please give a path of file :/test/t1 /test/t1 is common file [root@centos7 test]# sh if_3 Please give a path of file : No path [root@centos7 test]# sh if_3 Please give a path of file :/e Wrong path
………………………………………………………………………………………………………………………
case語句
case語句:特色能夠理解爲特殊的if多分支語句
它在特定狀況下使用會簡化腳本。
case語句格式
case 變量引用 in
part1)
分支1
;;
part2)
分支2
;;
...
*)
默認分支
;;
esac
case中的變量引用內容須要等於in分支中的part#部分,也就是出現等值比較時使用case效果會很好。下面舉一個例子。
………………………………………………………………………………………………………………………
示例:輸入一個文件的絕對路徑判斷該文件的類型。
#!/bin/bash #version 1.0 #auther chawan #date:20160905 read -p "Please give a path of file :" Path test -z $Path && echo "No path" && exit 1 ! test -e $Path && echo "Wrong path " && exit 2 #取文件類型符:d,-,l,p,s,b,c type_file=`ls -l -d $Path | cut -c1` case $type_file in -) echo "$Path is common file" ;; d) echo "$Path is diretory file" ;; l) echo "$Path is link file" ;; b) echo "$Path is block file" ;; c) echo "$Path is char file" ;; s) echo "$Path is socket file" ;; p) echo "$Path is pipe file" ;; *) echo "Unknown file type" ;; esac
下面輸入幾個文件路徑進行測試
[root@centos7 test]# sh case_1 Please give a path of file :/etc/fstab /etc/fstab is common file [root@centos7 test]# sh case_1 Please give a path of file :/dev/sdb /dev/sdb is block file [root@centos7 test]# sh case_1 Please give a path of file :/usr /usr is diretory file [root@centos7 test]# sh case_1 Please give a path of file :/ee Wrong path [root@centos7 test]# sh case_1 Please give a path of file : No path
小結:
腳本中的一些注意事項:
腳本中不識別命令別名:以alias設定的別名在腳本中都不識別
選擇語句總結:
if選擇:if單分支,if雙分支,if多分支
case選擇:特殊的if多分支,在等值比較狀況下使用效果較好,簡化代碼量。
選擇語句的做用:
在腳本執行時按觸發的條件進入相應的語句執行。
何時使用選擇語句?
一般就是須要對一些問題分狀況討論時用,這個須要在寫的過程當中細細體會。