1. 程式人生 > >shell重溫---基礎篇(shell陣列&陣列操作)

shell重溫---基礎篇(shell陣列&陣列操作)

    上篇部落格已經分析重溫了shell的執行方式以及其中的變數還有字串,之後按照套路就是陣列方面了,廢話不多說,直接進入正題哈。(小白筆記,各位看官勿噴。。。)

    bash shell呢,支援一位陣列,不支援多維陣列,並且沒有限定陣列的大小,類似於C語言,元素的下標由0開始編號,下表可以是整數或者算術表示式,其值應大於或者等於0,在shell中用括號來表示陣列,陣列中的元素用空格來分割開來。定義陣列的一般形式為:

陣列名=(值12...n)

    例如:

array_name=(value0 value1 value2 value3)

    或者:

array_name=(
value0
value1
value2
value3
)

    還可以單獨定義陣列中的各個元素:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

    定義晚了陣列之後就要開始使用了,首先就是讀取:

${陣列名[下標]}

    例如:

valuen=${array_name[n]}

    使用@符號可以獲取陣列中的所有元素,例如:

echo ${array_name[@]}

    還有就是獲取我們定義的陣列的長度了:

# 取得陣列元素的個數
length=${#array_name[@]}# 或者
length=${#array_name[*]}# 取得陣列單個元素的長度
lengthn
=${#array_name[n]}

    好了,現在陣列也定義了,長度也能獲取了,接下來,理所應當必須是各種迴圈來處理陣列啊。。。

    先來一個if判斷的語法格式開開胃:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

    既然都有if判斷了,那麼elseif也同樣:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

    下面就給大家來個例項了:

a=10
b=20if[ $a == $b ]then
   echo "a 等於 b"elif[ $a -gt $b ]then
   echo "a 大於 b"elif[ $a -lt $b ]then
   echo "a 小於 b"else
   echo "沒有符合的條件"fi

    輸出的結果為:

a 小於 b

    既然都說到這裡了,再跟大家介紹一個比較實用的,test(用於檢測某個條件是否成立,可以進行數值,字元和檔案三個方面的檢測,後文會有詳解):

num1=$[2*3]
num2=$[1+5]if test $[num1]-eq $[num2]then
    echo '兩個數字相等!'else
    echo '兩個數字不相等!'fi

#輸出結果:兩個數字相等

    接下來就是重頭戲了,for迴圈和while迴圈:

forvarin item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

    寫成一行就是:

forvarin item1 item2 ... itemN;do command1; command2done;

    下面來一個例項哈:

for loop in12345do
    echo "The value is: $loop"done

    輸出的結果就是:

The value is:1The value is:2The value is:3The value is:4The value is:5

    for迴圈還可以順序輸出字串來著:

for str in'This is a string'do
    echo $str
done

    結果就是:

Thisis a string

    然後呢就是while迴圈的格式了:

while condition
do
    command
done

    看一下例項哈(其中使用了let命令,它用於執行一個或者說多個表示式,變數計算中不需要加上$來表示變數):

#!/bin/shint=1while(( $int<=5))do
    echo $int
    let"int++"done

    這就是結果輸出:

12345

    while呢,還可以用於讀取鍵盤資訊,下面這個例項中,輸入資訊設定為變數FILM,按下Ctrl+d鍵結束:

echo '按下 <CTRL-D> 退出'
echo -n '輸入你最喜歡的網站名: 'while read FILM
do
    echo "是的!$FILM 是一個好網站"done

    輸出的結果為:

按下<CTRL-D>退出輸入你最喜歡的網站名:朋戀冉曲是的!朋戀冉曲是一個好網站

    再來的話就是無限迴圈了:

while:do
    command
done

    或者嘞:

whiletruedo
    command
done

    還有就是:

for((;;))

    然後呢就是until迴圈了:

    官方解釋就是:

until迴圈執行一系列命令直至條件為真時停止。

until迴圈與while迴圈在處理方式上剛好相反。

一般while迴圈優於until迴圈,但在某些時候—也只是極少數情況下,until迴圈更加有用。

條件可為任意測試條件,測試發生在迴圈末尾,因此迴圈至少執行一次—請注意這一點。

    語法格式就是:
until condition
do
    command
done

    有了迴圈,我們當然要結束這個迴圈了,php中是break和continue,在shell中也是一樣,接下來例項附上:

#!/bin/bashwhile:do
    echo -n "輸入 1 到 5 之間的數字:"
    read aNum
    case $aNum in1|2|3|4|5) echo "你輸入的數字為 $aNum!";;*) echo "你輸入的數字不是 1 到 5 之間的! 遊戲結束"break;;esacdone

    執行以上程式碼,輸出的結果為:

輸入15之間的數字:3你輸入的數字為3!輸入15之間的數字:7你輸入的數字不是15之間的!遊戲結束
#!/bin/bashwhile:do
    echo -n "輸入 1 到 5 之間的數字: "
    read aNum
    case $aNum in1|2|3|4|5) echo "你輸入的數字為 $aNum!";;*) echo "你輸入的數字不是 1 到 5 之間的!"continue
            echo "遊戲結束";;esacdone

    執行程式碼你就會發現,當輸入大於5的數字時,迴圈不會結束,語句echo "遊戲結束"永遠不會被執行。

    順道再提一個case多選擇語句,它可以用來匹配一個值或者一個模式,當匹配成功,會執行相應的程式碼,其格式為:

casein模式1)
    command1
    command2
    ...
    commandN
    ;;模式2
    command1
    command2
    ...
    commandN
    ;;esac

    下面例項是提示輸入一到四,於每一種模式進行匹配:

echo '輸入 1 到 4 之間的數字:'
echo '你輸入的數字為:'
read aNum
case $aNum in1)  echo '你選擇了 1';;2)  echo '你選擇了 2';;3)  echo '你選擇了 3';;4)  echo '你選擇了 4';;*)  echo '你沒有輸入 1 到 4 之間的數字';;

    執行上面的程式碼,隨著輸入的值的不同,會有不同的返回值,例如:

輸入14之間的數字:你輸入的數字為:3你選擇了3

    好啦,今天的筆記就到這裡了,以後的,會持續接上。。。

    再囉嗦一下,本人純屬小白自學,各位看官千萬勿噴哈。。。