shell 腳本編程學習(三) 條件控制,循環控制

編程當然少不了條件控制和循環控制了,shell 腳本也有自己的條件和循環方法。

條件控制

if 語句

條件控制中最常用的就是 if 判斷了,shell 中通過 if-then 語句來實現。它的結構是:

if some_condition; then
    do something
fi

if condition_1; then
    do something
elif condition_2
    do something
else
    do something
fi

與 js 中的 if、else、else if 道理相同,需要注意的是 if 控制結構要用反過來寫的 if 即 fi 來結束,在 shell 的其他控制結構中也有這樣的規則。
不同於其他編程語言(例如 js),在 if 的 condition 中我們不能直接用 ==、!=、>、< 之類的邏輯運算符來寫條件,需要藉助一個 test 命令來實現邏輯判斷。示例如下:

NAME='jack'
if ( test $NAME = 'jack' ); then # 判斷 NAME 是 jack
    echo 'hello jack'
fi

if ( test $NAME != 'jack' ); then # 判斷 NAME 不是 jack
    echo 'not jack'
fi

這裏要注意 if 和括號之間的空格以及括號內語句中的空格是必須的,因爲它們是shell 劃分命令參數的依據。除了邏輯判斷之外,test 命令還能通過一些選項判斷文件目錄和文件權限等。如果覺得寫 test 麻煩,也可以用中括號代替括號,與寫 test 的方式等價,同樣也要注意命令中的空格。例如:

$NAME = 'jack'
$DIR = '/etc'
if [ $NAME = 'jack' ] # 邏輯判斷,等價於 if ( test $NAME = 'jack' )
if [ -d $DIR ] # 判斷是否是文件夾
if [ -e $DIR ] # 判斷文件是否存在
if [ -f $DIR ] # 判斷文件存在並且是一個普通文件(不是目錄或其他特殊的文件)

注意不像其他編程語言有數值類型,在 shell 中所有的變量都是字符串。所以想要進行數字的運算和比較需要藉助其他命令(例如 expr),不能直接加減。

NUM=1
NUM=NUM+1
echo $NUM # 輸出 1+1 而不是 2
NUM=1
NUM=`expr $NUM + 1` # 用 expr 命令進行數字運算,注意數字和運算符之間要有空格
echo $NUM # 輸出 2

case 語句

當判斷一個變量的多種取值時,用 case 語句會比 if 更方便和清楚。shell 中 case 語句的語法如下:

case expression in
    pattern1)
        action1
    ;;
    pattern2)
        action2
    ;;
    pattern3)
        action3
    ;;
    *)
        defaultAction
    ;;
esac

除了語法不一樣外,和其他語言的 case 作用相同,case 結構也用反寫的 case 即 esac 來結束。

循環控制

while 語句

while 循環在編程語言中很常見,只要滿足特定的條件,while 語句就重複執行代碼塊。在 shell 中條件判斷也可以通過 test 命令或中括號的形式來實現,示例如下:

# 循環輸出 1 到 9 的數字
$NUM=1
while [ $NUM != 10 ]
do
    echo $NUM
    NUM=`expr $NUM + 1`
done

until 語句

until 語句的條件與 while 相反,只要不滿足特定的條件,until 語句就重複執行。例如:

# 循環輸出 9 到 1 的數字
$NUM=9
until [ $NUM = 0 ] # 輸出 9 到 1 的數字
do
    echo $NUM
    NUM=`expr $NUM - 1`
done

以上就是 shell 中常用的控制結構了,與其他編程語言類似,但要注意語法和細節上的差異。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章