這篇主要記錄下數組的使用,相比來講用得比較少,一樣的根據閱讀<<跟老男孩學Linux運維:Shell編程實戰>>所記錄
系列筆記傳送門:linux
Shell數組是一個元素的集合,它把有限個元素用一個名字來命名,而後用編號對全部元素進行區分。這個名字就是數組名,用於區分不一樣內容的編號就叫數組的下標,組成數組的各個元素就是數組的元素,也叫下標變量。shell
1.1 數組的定義編程
數組的定義有多種方法:segmentfault
方法1示例:數組
[root@moli_linux1 ~]# array=(one two three) [root@moli_linux1 ~]# echo ${array[*]} one two three [root@moli_linux1 ~]# echo ${array[0]} one [root@moli_linux1 ~]# echo ${array[1]} two [root@moli_linux1 ~]# echo ${array[2]} three
方法2示例:bash
[root@moli_linux1 ~]# array=([1]=one [2]=two [3]=three) [root@moli_linux1 ~]# echo ${array[*]} one two three [root@moli_linux1 ~]# echo ${array[1]} one [root@moli_linux1 ~]# echo ${array[2]} two [root@moli_linux1 ~]# echo ${array[3]} three
方法3示例:運維
[root@moli_linux1 ~]# array[0]=a;array[1]=b;array[2]=c [root@moli_linux1 ~]# echo ${array[*]} a b c [root@moli_linux1 ~]#
方法4示例:函數
[root@moli_linux1 test]# touch {1..3}.txt [root@moli_linux1 test]# ls 1.txt 2.txt 3.txt [root@moli_linux1 test]# array=($(ls .)) [root@moli_linux1 test]# echo ${array[*]} 1.txt 2.txt 3.txt [root@moli_linux1 test]#
1.2 數組打印輸出spa
單個元素
的值時,使用echo ${數組名[下標值]}
,若是沒有指定數組的下標,那麼默認數組的下標從0開始;整個
數組的值可使用echo ${數組名[*]}
或者echo ${數組名[@]}
[root@moli_linux1 test]$ array=(one two three) [root@moli_linux1 test]$ echo ${array[0]} one [root@moli_linux1 test]$ echo ${array[1]} two [root@moli_linux1 test]$ echo ${array[*]} one two three [root@moli_linux1 test]$ echo ${array[@]} one two three
除了打印數組的值之外,還能夠輸出數組元素的個數,使用echo ${#數組名[*]}
或者echo ${#數組名[@]}
。這與變量字串的內容是同樣,數組元素也是變量,不過是特殊的變量。code
[root@moli_linux1 test]$ echo ${#array[*]} 3 [root@moli_linux1 test]$ echo ${#array[@]} 3
1.3 數組的賦值
數組的賦值直接使用數組名[下標值]=value
,當下標值不存在則添加一個新的數組元素,若是下標存在則會覆蓋原來的值。
[root@moli_linux1 test]$ echo ${array[*]} one two three [root@moli_linux1 test]$ echo ${array[1]} two [root@moli_linux1 test]$ array[3]=four # 進行賦值 [root@moli_linux1 test]$ echo ${array[*]} one two three four [root@moli_linux1 test]$ array[0]=1 # 下標已存在,覆蓋下標爲0的值 [root@moli_linux1 test]$ echo ${array[*]} 1 two three four
1.4 數組的刪除
數組的本質仍是變量,所以能夠用unset 數組名[下標值]
進行數組元素的刪除,若是不指定下標值,而是使用unset 數組名
則會刪除整個數組。
[root@moli_linux1 test]$ echo ${array[*]} 1 two three four [root@moli_linux1 test]$ unset array[0] # 刪除下標爲0的數組元素1 [root@moli_linux1 test]$ echo ${array[*]} # 已刪除 two three four [root@moli_linux1 test]$ unset array # 刪除整個數組 [root@moli_linux1 test]$ echo ${array[*]} # 顯示爲空,已被刪除 [root@moli_linux1 test]$
1.5 數組內容的截取與替換
數組的截取和替換與變量字串的截取和替換是同樣的,直接例子吧!
[root@moli_linux1 test]# array=(1 2 3 4 5) [root@moli_linux1 test]# echo ${array[@]:1:3} # 截取下標爲1到3的元素 2 3 4 [root@moli_linux1 test]# array=($(echo {a..z})) # 將命令的結果賦值給數組 [root@moli_linux1 test]# echo ${array[*]} a b c d e f g h i j k l m n o p q r s t u v w x y z [root@moli_linux1 test]# echo ${array[@]:1:3} # 截取下標爲1到3的元素 b c d [root@moli_linux1 test]# echo ${array[@]:0:2} a b [root@moli_linux1 test]# echo ${array[@]/a/A} # 把小寫字母a替換爲大寫字母A A b c d e f g h i j k l m n o p q r s t u v w x y z
2.1 結合for循環打印數組元素
#!/bin/bash echo "====No.1=====" array1=(1 2 3 4 5) for((i=0;i<${#array1[@]};i++)) do echo ${array1[i]} done echo "====No.2====" array2=(1 2 3 4 5) for n in ${array2[*]} do echo $n done
執行結果:
2.2 打印下列句子中,單詞字母數小於6的單詞
句子:I am oldboy teacher welcome to oldboy training class
用數組方法實現:
#!/bin/bash array=(I am oldboy teacher welcome to oldboy training class) echo "====No,1====" for((i=0;i<${#array[@]};i++)) do if [ ${#array[$i]} -lt 6 ];then # 這裏使用變量字串知識進行字符串長度統計 echo "${array[$i]}" fi done echo "====No.2====" for word in ${array[*]} do if [ `expr length $word` -lt 6 ];then # 使用expr命令的length函數計算字符串長度 echo $word fi done
執行結果:
[root@moli_linux1 script]# sh 13_4.sh ====No,1==== I am to class ====No.2==== I am to class