玩轉Bash指令碼 選擇結構之if

2022-09-01 08:36:12 字數 2125 閱讀 3770

差點兒全部的程式語言中都有流程控制的概念。即順序結構、選擇結構和迴圈結構。

選擇結構也稱分支結構,比方c類語言中的ifswitch語句。

前面我已經講過了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...