數組中能夠存放多個值。Bash Shell 只支持一維數組(不支持多維數組),初始化時不須要定義數組大小(與 PHP 相似)。編程
與大部分編程語言相似,數組元素的下標由0開始。數組
Shell 數組用括號來表示,元素用"空格"符號分割開,語法格式以下:bash
array_name=(value1 ... valuen)
#!/bin/bash # author:ethan my_array=(A B "C" D)
咱們也能夠使用下標來定義數組:編程語言
array_name[0]=value0 array_name[1]=value1 array_name[2]=value2
讀取數組元素值的通常格式是:學習
${array_name[index]}
#!/bin/bash # author:ethan my_array=(A B "C" D) echo "第一個元素爲: ${my_array[0]}" echo "第二個元素爲: ${my_array[1]}" echo "第三個元素爲: ${my_array[2]}" echo "第四個元素爲: ${my_array[3]}"
執行腳本,輸出結果以下所示:spa
$ chmod +x test.sh $ ./test.sh 第一個元素爲: A 第二個元素爲: B 第三個元素爲: C 第四個元素爲: D
使用@ 或 * 能夠獲取數組中的全部元素,例如:code
#!/bin/bash # author:ethan my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "數組的元素爲: ${my_array[*]}" echo "數組的元素爲: ${my_array[@]}"
執行腳本,輸出結果以下所示:索引
$ chmod +x test.sh $ ./test.sh 數組的元素爲: A B C D 數組的元素爲: A B C D
獲取數組長度的方法與獲取字符串長度的方法相同,例如:字符串
#!/bin/bash # author:ethan my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "數組元素個數爲: ${#my_array[*]}" echo "數組元素個數爲: ${#my_array[@]}"
執行腳本,輸出結果以下所示:class
$ chmod +x test.sh $ ./test.sh 數組元素個數爲: 4 數組元素個數爲: 4
Notes:
數組的值也能夠寫入變量。
例如:
A=1 my_array=($A B C D) echo "第一個元素爲: ${my_array[0]}" echo "第二個元素爲: ${my_array[1]}" echo "第三個元素爲: ${my_array[2]}" echo "第四個元素爲: ${my_array[3]}" 輸出爲: 第一個元素爲: 1第二個元素爲: B第三個元素爲: c第四個元素爲: D
根據數組元素索引獲取該數組元素值時,數組下標可爲變量。
例如:
arr=(a b c d) i=2 echo ${arr[i]} 輸出爲:c
看數組的時候,以爲遍歷數組用的比較多,因此本身試着寫了寫遍歷,同時試了一下在SHELL腳本中的變量自增幾個寫法,在就新手學習的時候注意一下 [ 和 $ 之間要有空格,沒有空格運行會報錯,新手可能不太注意這一點,我開始就沒注意到~~~~
示例:
#!/bin/bash my_arry=(a b "c","d" abc) echo "-------FOR循環遍歷輸出數組--------" for i in ${my_arry[@]}; do echo $i done echo "-------::::WHILE循環輸出 使用 let i++ 自增:::::---------" j=0 while [ $j -lt ${#my_arry[@]} ] do echo ${my_arry[$j]} let j++ done echo "--------:::WHILE循環輸出 使用 let "n++ "自增: 多了雙引號,其實不用也能夠:::---------" n=0 while [ $n -lt ${#my_arry[@]} ] do echo ${my_arry[$n]} let "n++" done echo "---------::::WHILE循環輸出 使用 let m+=1 自增,這種寫法其餘編程中也經常使用::::----------" m=0 while [ $m -lt ${#my_arry[@]} ] do echo ${my_arry[$m]} let m+=1 done echo "-------::WHILE循環輸出 使用 a=$[$a+1] 自增,我的以爲這種寫法比較麻煩::::----------" a=0 while [ $a -lt ${#my_arry[@]} ] do echo ${my_arry[$a]} a=$[$a+1] done