差點兒全部的程式語言中都有流程控制的概念。即順序結構、選擇結構和迴圈結構。
選擇結構也稱分支結構,比方c類語言中的if和switch語句。
前面我已經講過了test表示式及其簡化版 [ ] 運算子的使用,這些推斷的語句就可以作為if結構的條件。
bash shell中我們能夠使用的不論什麼能夠有真假推斷功能的命令(不管是內部命令,還是外部命令)都能夠作為推斷的條件。
注意if和[ ]之間要有空格。
if [ ... ]
bash中的if相同支援與if配對的else 和 else if的概念,僅僅只是,else if在這裡寫法是 elif。
if語句基本結構是這樣:
if 《條件1>注意if語句中並無尖括號< >。用你的條件表示式來替換掉 《條件》 這部分。then
語句1elif 《條件2>
語句2elif 《條件...>
語句...
else
語句nfi
實際依據你的須要使用elif和else。由於bash不同於c語言,他沒有使用花括號來閉合乙個作用域的寫法。bash的if語句閉合作用域使用的是 if 的「反語」——fi。
這是個有趣的現象,之後我們還會見到類似的寫法。
關於 then。if的條件後面都須要加乙個保留字then。你也能夠把它們寫作同一行。可是須要注意的是要用分號來分隔,這些bash直譯器才知道then不是if條件的一部分。否則會報錯。
if 《條件》;then輸入乙個數字,並推斷是否小於100
#!/bin/bash推斷當前資料夾下乙個檔案是否存在,若存在推斷是否為資料夾檔案。read -p "請輸入乙個數字:" a
if [ $a -lt 100 ]
then
echo "a<100"
else
echo "a>=100"
fi
#!/bin/bash推斷當前環境中是否安裝了某一命令。read -p "請輸入乙個檔名稱:" name
if [ -e $name ]
then
echo -n "$name存在,"
if [ -d $name ]
then
echo "而且是乙個資料夾"
else
echo "但不是乙個資料夾"
fielse
echo "$name不存在"
fi
#!/bin/bash這個指令碼,我命名為var.sh。請看它的執行結果read -p "請輸入乙個命令:" var
if which $var>/dev/null
then
echo "$var存在"
else
echo "$var不存在"
fi
另外另一點要注意。在c語言中。0為假。非0為真。
而在bash中正好相反。
不信你就在終端執行一下。which pwd這個命令。
然後再使用 echo $?
看看這個命令的執行狀態(或者理解為返回值)。
能夠發現,echo $?的結果是0。
而執行了which delete這個命令,再使用echo $?能夠發現它的輸出是1。
當然了。除了which以外還有很多內部或外部的命令能夠和 if 結構組合使用。和外部命令的無縫整合是bash以及其它shell強大的基礎。
與其它語言一樣,bash中的if相同可以和 與或非 組合使用。而且通過結合內部或外部的命令一起使用,可以達到其它語言達不到的效果。
比方:
if [ -e $filename ] && rm $filenamethen
echo "$filaname 不存在!"
fi
玩轉Bash指令碼 選擇結構之if
幾乎所有的程式語言中都有流程控制的概念,即順序結構 選擇結構和迴圈結構。選擇結構也稱分支結構,比如c類語言中的if和switch語句。前面我已經講過了test表示式及其簡化版 運算子的使用,這些判斷的語句即可作為if結構的條件。bash shell中我們可以使用的任何能夠有真假判斷功能的命令 無論是...
玩轉Bash指令碼 迴圈結構之for迴圈
for 變數 in 取值列表 do 各種操作 done 還有罕見的寫法就是都寫作一行裡 for 變數 in 取值列表 do 各種操作 done 取值列表大致可以分成列舉和迭代兩類 取值列表為空格或回車符分割的字串 foriin meat sleep woman doecho i like i don...
玩轉Bash指令碼 迴圈結構之for迴圈
for迴圈 for 變數 in 取值列表 do 各種操作 done還有罕見的寫法就是都寫作一行裡 for 變數 in 取值列表 do 各種操作 done取值列表大致可以分成列舉和迭代兩類 取值列表為空格或回車符分割的字串 for i in apple meat sleep woman do echo...