shell程式設計之條件語句

weixin_50344792發表於2020-11-05

Shell程式設計之條件語句

我們經常在指令碼中使用條件判斷,當條件成立時,條件語句會返回特定的值。像test命令和**“[條件表示式]”這種型別是用來判斷條件是否成立。當然我們也有if**條件語句。

條件判斷

我們經常用**[ 表示式 ]**來判斷,如[ 3 -eq 5 ],顯然這個表示式是不成立的。再比如[ -d /media/cdrom ],echo $?,返回值為0.說明上述條件判斷是成立的。

那麼我們常用的條件判斷符號有:

  1. -d:判斷是否為目錄;
    -e:判斷目錄或檔案是否存在;
    -f:判斷是否為檔案;
    -r:判斷當前使用者是否有許可權讀取;
    -w判斷當前使用者是否有權寫入;
    -x:判斷當前使用者是否有權執行。
    在這裡插入圖片描述
  2. =:判斷兩邊字串是否相同;
    !=:判斷兩邊字串不同,
    !為取反的意思;
    -z:為判斷字串是否為空。
    在這裡插入圖片描述
  3. -eq:表示兩數字相等;
    -ge:表示大於等於;
    -le:表示小於等於;
    -gt:表示大於;
    -lt:表示小於。

if語句的結構

if語句與判斷條件結合,可以執行指定好的命令操作。如,條件成立則執行命令1;條件不成立則執行命令2 。

if語句有單分支結構,即滿足某個條件就執行某個命令。雙分支結構即,滿足某個條件則執行命令1,否則執行命令2 。多分支結構是要有多個判斷要執行。具體格式為:

  1. 單分支結構:
    if [表示式];then
    命令1
    fi
    在這裡插入圖片描述

  2. 雙分支結構:
    if [表示式];then
    命令1
    else
    命令2
    fi

  3. 多分支結構:
    if [表示式1];then
    命令1
    elif [表示式2];then
    命令2

指令碼案例

用if雙分支來判斷主機是否線上。

#!/bin/bash
echo "這是檢測主機是否線上的指令碼."
contain=$(cat /opt/ipadd.txt)
for test in $contain
 do
ping -c2 -i0.2 -W1 $test &> /dev/nell
if [ $? -eq 0 ]
 then
        echo "$test,主機線上"
 else
        echo "$test,主機不線上"
fi
 done

使用if多分支結構判斷數字大小猜數字指令碼

n=0
echo "這是一個猜價格的遊戲,價格在1~1000的範圍內."
jiage=$(expr $RANDOM % 1000)
while true
do
read -p "請輸入你猜的價格:" cai
if [ $cai -eq $jiage ]
  then
         let n++
         echo "恭喜你猜對了!它的價格是:$jiage.你一共猜了$n次."
         exit 0
elif [ $cai -gt $jiage ]
 then
        let n++
        echo "你猜的價格高了,猜低一點."
elif [ $cai -lt $jiage ]
 then
        let n++
        echo "你猜的價格低了,猜高一點."
fi
done

相關文章