上篇博客已經分析重溫了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=20 if [ $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循環:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
寫成一行就是:
for var in item1 item2 ... itemN; do command1; command2… done;
下面來一個實例哈:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
輸出的結果就是:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
for循環還可以順序輸出字符串來着:
for str in 'This is a string' do echo $str done
結果就是:
This is a string
然后呢就是while循環的格式了:
while condition do command done
看一下實例哈(其中使用了let命令,它用於執行一個或者說多個表達式,變量計算中不需要加上$來表示變量):
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
這就是結果輸出:
1 2 3 4 5
while呢,還可以用於讀取鍵盤信息,下面這個實例中,輸入信息設定為變量FILM,按下Ctrl+d鍵結束:
echo '按下 <CTRL-D> 退出' echo -n '輸入你最喜歡的網站名: ' while read FILM do echo "是的!$FILM 是一個好網站" done
輸出的結果為:
按下 <CTRL-D> 退出 輸入你最喜歡的網站名:朋戀冉曲 是的!朋戀冉曲 是一個好網站
再來的話就是無限循環了:
while : do command done
或者嘞:
while true do command done
還有就是:
for (( ; ; ))
然后呢就是until循環了:
官方解釋就是:
until循環執行一系列命令直至條件為真時停止。
until循環與while循環在處理方式上剛好相反。
一般while循環優於until循環,但在某些時候—也只是極少數情況下,until循環更加有用。
條件可為任意測試條件,測試發生在循環末尾,因此循環至少執行一次—請注意這一點。
語法格式就是:
until condition do command done
有了循環,我們當然要結束這個循環了,php中是break和continue,在shell中也是一樣,接下來實例附上:
#!/bin/bash while : do echo -n "輸入 1 到 5 之間的數字:" read aNum case $aNum in 1|2|3|4|5) echo "你輸入的數字為 $aNum!" ;; *) echo "你輸入的數字不是 1 到 5 之間的! 游戲結束" break ;; esac done
執行以上代碼,輸出的結果為:
輸入 1 到 5 之間的數字:3 你輸入的數字為 3! 輸入 1 到 5 之間的數字:7 你輸入的數字不是 1 到 5 之間的! 游戲結束
#!/bin/bash while : do echo -n "輸入 1 到 5 之間的數字: " read aNum case $aNum in 1|2|3|4|5) echo "你輸入的數字為 $aNum!" ;; *) echo "你輸入的數字不是 1 到 5 之間的!" continue echo "游戲結束" ;; esac done
運行代碼你就會發現,當輸入大於5的數字時,循環不會結束,語句echo "游戲結束"永遠不會被執行。
順道再提一個case多選擇語句,它可以用來匹配一個值或者一個模式,當匹配成功,會執行相應的代碼,其格式為:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
下面實例是提示輸入一到四,於每一種模式進行匹配:
echo '輸入 1 到 4 之間的數字:' echo '你輸入的數字為:' read aNum case $aNum in 1) echo '你選擇了 1' ;; 2) echo '你選擇了 2' ;; 3) echo '你選擇了 3' ;; 4) echo '你選擇了 4' ;; *) echo '你沒有輸入 1 到 4 之間的數字' ;;
運行上面的代碼,隨着輸入的值的不同,會有不同的返回值,例如:
輸入 1 到 4 之間的數字: 你輸入的數字為: 3 你選擇了 3
好啦,今天的筆記就到這里了,以后的,會持續接上。。。
再啰嗦一下,本人純屬小白自學,各位看官千萬勿噴哈。。。
原文鏈接:https://blog.csdn.net/luyaran/article/details/79360914