shell重溫---基礎篇(shell陣列&陣列操作)
上篇部落格已經分析重溫了shell的執行方式以及其中的變數還有字串,之後按照套路就是陣列方面了,廢話不多說,直接進入正題哈。(小白筆記,各位看官勿噴。。。)
bash shell呢,支援一位陣列,不支援多維陣列,並且沒有限定陣列的大小,類似於C語言,元素的下標由0開始編號,下表可以是整數或者算術表示式,其值應大於或者等於0,在shell中用括號來表示陣列,陣列中的元素用空格來分割開來。定義陣列的一般形式為:
陣列名=(值1值2...值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; command2…done;
下面來一個例項哈:
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
執行以上程式碼,輸出的結果為:
輸入1到5之間的數字:3你輸入的數字為3!輸入1到5之間的數字:7你輸入的數字不是1到5之間的!遊戲結束
#!/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多選擇語句,它可以用來匹配一個值或者一個模式,當匹配成功,會執行相應的程式碼,其格式為:
case值in模式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 之間的數字';;
執行上面的程式碼,隨著輸入的值的不同,會有不同的返回值,例如:
輸入1到4之間的數字:你輸入的數字為:3你選擇了3
好啦,今天的筆記就到這裡了,以後的,會持續接上。。。
再囉嗦一下,本人純屬小白自學,各位看官千萬勿噴哈。。。