幾乎所有的程式語言中都有流程控制的概念,即順序結構、選擇結構和迴圈結構。
選擇結構也稱分支結構,比如c類語言中的if和switch語句。
前面我已經講過了test表示式及其簡化版 [ ] 運算子的使用,這些判斷的語句即可作為if結構的條件。
bash shell中我們可以使用的任何能夠有真假判斷功能的命令(無論是內部命令,還是外部命令)都可以作為判斷的條件。
注意if和[ ]之間要有空格。if [ ... ]
bash中的if同樣支援與if配對的else 和 else if的概念,只不過,else if在這裡寫法是 elif。
if語句基本結構是這樣:
if 《條件1>
then
語句1elif 《條件2>
語句2elif 《條件...>
語句...
else
語句nfi
注意if語句中並無尖括號< >。用你的條件表示式來替換掉 《條件》 這部分。
實際根據你的需要使用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
read -p "請輸入乙個命令:" var
if which $var>/dev/null
then
echo "$var存在"
else
echo "$var不存在"
fi
這個指令碼,我命名為var.sh,請看它的執行結果
另外還有一點要注意。在c語言中,0為假,非0為真。而在bash中正好相反。
不信你就在終端執行一下,which pwd這個命令。然後再使用 echo $?看看這個命令的執行狀態(或者理解為返回值)。
可以發現,echo $?的結果是0。而執行了which delete這個命令,再使用echo $?可以發現它的輸出是1。
當然了,除了which以外還有許多內部或外部的命令可以和 if 結構組合使用,和外部命令的無縫整合是bash以及其他shell強大的基礎。
與其他語言一樣,bash中的if同樣可以和 與或非 組合使用。並且通過結合內部或外部的命令一起使用,能夠達到其他語言達不到的效果。
比如:
if [ -e $filename ] && rm $filename
then
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...