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=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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM