1. 程式人生 > >Shell中if的使用詳解_&&與||的使用詳解

Shell中if的使用詳解_&&與||的使用詳解

一 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這個變數是空的話(即前半部分條件判斷返回為假),執行後邊的賦值語句。