歡迎您光臨本站 註冊首頁

《我的shell筆記之初窺門徑之shell控制語句》

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

《我的shell筆記之初窺門徑之shell控制語句》


(一)if語句
原型1: if···then結構
if測試條件
then 語句1
fi
原型2: if···then···else結構
if測試條件
then 語句1
else 語句2
fi
原型3: if···then···elif···then···else結構
if測試條件
then 語句1
elif 測試條件
then 語句2
else 語句3
fi
在if語句中,重要的環節是編寫測試條件,也就是程序執行的判斷條件。事實上,可以將命令的執行結果當成條件測試。例如,如果命令正常結束,則表示執行成功,其返回值為0,條件測試為真;如果命令執行不成功,其返回值不等於0,條件測試為假。
測試條件的編寫一般有以下3種形式。
(1)用test命令。
(2)用方括弧[]將測試條件括起來。
(3)採用[[條件表達式]],條件表達式用來測試文件的屬性和進行字元串比較。
下面以test為例:
test 的命令原型為:
test 表達式
test一般是與系統運算符搭配起來使用,它可以與如下四類運算符共同使用。
(1)字元串測試符
(2)數值測試運算符
(3)邏輯運算符
(4)文件運算符
(二)case語句
case語句是一種多重判斷語句,類似於多個if···elif操作。case語句的原型為:
case 字元串 in
模式串表達式1)語句1;;
模式串表達式2)語句2;;
模式串表達式3)語句3;;
模式串表達式4)語句4;;
·
·
·
esac
case語句執行原理,是將字元串與各個模式順次匹配,若滿足則執行,否則繼續查找,如果沒有匹配成功的,則不執行任何語句,直接退出。
使用case語句需要注意的是:
每個模式匹配后的處理語句,是以;;兩個分號進行結束。
模式串表達式應該有唯一性,不要出現幾個模式串表達式能夠互相轉換的情況,這樣不利於語句調試。
一個模式表達式可以包含多個模式串,但要用「|」隔開,「|」在這裡是「或」的關係。
例子:
#! /bin/sh
echo please input your name:
read name
case $name in
Tom)
echo your name is tom;;
Jim)
echo your name is Jim;;
*)
echo "Sorry we don't know your name";;
esac
(三)Shell循環語句
for語句
三種表述方式:
(1)for 變數 in 取值集合
do
語句
done
(2)for 變數 in 文件正則表達式
do
語句
done
(3)for 變數 in $*
do
語句
done
例子:
#! /bin/sh
UNIX=(tom jim my test)
for i in ${name
  • }
    do
    echo $i
    done
    運行結果:
    tom
    jim
    my
    test
    上述程序是針對數組的遍歷操作,依次將數組中的值取出賦予i,同時在循環體中將i的值輸出。
    (四)while語句
    while語句的一般形式為:
    while 條件測試語句
    do
    語句
    done
    while語句的執行過程是:先測試條件語句是否為真,若為真,則執行循環體;當執行完當前命令后,在進行條件測試,直到條件測試結果為假,循環結束。
    這裡的條件測試語句可以是test語句,也可以是運行命令的返回值,若返回值大於0,則表示條件為真,否則條件為假。
    例子:
    #! /bin/sh
    type = "";
    echo input your type:
    read type
    while [$type != "quit"]
    do
    echo "your input is :" $type
    echo input your type:
    read type
    done
    這是一段互動式的代碼,不斷向終端輸入字元串。while語句的判斷條件是:當輸入的字元串值為quit時,則退出;否則除輸出上次用戶輸入的信息外,繼續要求用戶輸入字元串。
    看看時間不早了,都已經是第二天了,困困的我不得不去睡了,明天還有更多的工作等著我去做。大家保重哦,我們明晚繼續。再見。
    未完待續······

  • [火星人 ] 《我的shell筆記之初窺門徑之shell控制語句》已經有265次圍觀

    http://coctec.com/docs/linux/show-post-184200.html