Shell中if的使用詳解_&&與||的使用詳解
阿新 • • 發佈:2019-01-23
一 IF使用詳解
1 格式
1.1 單分支語句結構
if [ 條件表示式 ]; then
指令
fi
1.2 雙分支語句結構
if [ 條件表示式 ]; then
指令一
else
指令二
fi
1.3 多分支語句結構
if [ -f file ]; then
echo "yes yes yes"
elif [ -z file ]; then
echo "yes yes"
else
echo "nonono"
fi
上面直接給出了多分支if語句的一個例項。從上面三個結構中可以看出,條件表示式的左右都要有空格 。
2 條件表示式的內容
2.1 字串的判斷
str1 = str2 當兩個串有相同內容、長度時為真
str1 != str2 當串str1和str2不等時為真
-n str1 當串的長度大於0時為真(串非空)
-z str1 當串的長度為0時為真(空串)
str1 當串str1為非空時為真
2.2 數字的判斷
int1 -eq int2 兩數相等為真
int1 -ne int2 兩數不等為真
int1 -gt int2 int1大於int2為真
int1 -ge int2 int1大於等於int2為真
int1 -lt int2 int1小於int2為真
int1 -le int2 int1小於等於int2為真
2.3 檔案的判斷
-r file 使用者可讀為真
-w file 使用者可寫為真
-x file 使用者可執行為真
-f file 檔案為正規檔案為真
-d file 檔案為目錄為真
-c file 檔案為字元特殊檔案為真
-b file 檔案為塊特殊檔案為真
-s file 檔案大小非0時為真
-t file 當檔案描述符(預設為1 )指定的裝置為終端時為真
2.4 複雜邏輯判斷
條件表示式中可能有多個條件,需要使用與或非等邏輯操作。
-a 與
-o 或
! 非
2.5 一個例項
if [ $score -ge 0 ]&&[ $score -lt 60 ];then
echo "sorry,you are lost!"
elif [ $score -ge 60 ]&&[ $score -lt 85 ];then
echo "just soso!"
elif [ $score -le 100 ]&&[ $score -ge 85 ];then
echo "good job!"
else
echo "input score is wrong , the range is [0-100]!"
fi
當然,上面的例項也可以用 -a 來改寫:
if [ $score -ge 0 -a $score -lt 60 ];then
echo "sorry,you are lost!"
elif [ $score -ge 60 -a $score -lt 85 ];then
echo "just soso!"
elif [ $score -le 100 -a $score -ge 85 ];then
echo "good job!"
else
echo "input score is wrong , the range is [0-100]!"
fi
二 &&與||的使用
有時候,我們可以直接使用&&和||的組合來代替if表示式。
2.1 &&運算子
command1 && command2
- 命令之間使用 && 連線,實現邏輯與的功能。
- 只有在 && 左邊的命令返回真,&& 右邊的命令才會被執行。
- 只要有一個命令返回假(命令返回值 $? == 1),後面的命令就不會被執行。
2.2 ||運算子
command1 || command2
- 命令之間使用 || 連線,實現邏輯或的功能。
- 只有在 || 左邊的命令返回假,|| 右邊的命令才會被執行。
- 只要有一個命令返回真,後面的命令就不會被執行。
比如在ARM的uboot的mkconfig檔案中的如下語句:
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
這條語句的意思是如果BOARD_NAME這個變數是空的話(即前半部分條件判斷返回為假),執行後邊的賦值語句。