linux中shell指令碼數組的操作教程

來源:互聯網
上載者:User

數組賦值:a=(1 2 3 4 5)
a[1]=1

數組長度:echo ${#a[@]}

或者 echo ${#a[*]}

讀取數組:echo ${a[@]}

或者 echo ${a[*]}
echo ${a[0]}                             PS: 數組下標從0開始
刪除數組:unset a
unset a[1]
數組分區:echo ${a[@]:0:3}                  顯示為1,2,3                ps:截取前3個數組值顯示
數組替換:echo ${a[@]/3/100}           顯示為1,2,100,4,5
數組迴圈取值用法:
for FILE in ${a[@]};do
echo ${FILE};
done

顯示數值:

#!/bin/bash
chars=’abcdefghijklmnopqrstuvwxyz’
for (( i=0; i<26; i++ )) ; do
array[$i]=${chars:$i:1}
echo ${array[$i]}
done

例子補充

1。將字串放在數組中,擷取其長度

#!/bin/bash
str="a b --n d"
array=($str)
length=${#array[@]}
echo $length

for ((i=0; i<$length; i++))
do
    echo ${array[$i]}
done

執行結果:

[oracle@99bill-as9 array]$ sh length.sh
4
a
b
--n
d

列印字串:

 #!/bin/bash
str="a b c"
for i in $str
do
echo $i
done

或者:

#!/bin/bash
str="a b c"
array=($str)
for ((i=0;i<${#array[@]};i++))
do
  echo ${array[$i]}
done

 執行結果:

a
b
c

2。字串用其他字元分割時

#!/bin/bash

str2="a#b#c"
a=($(echo $str2 | tr '#' ' ' | tr -s ' '))
length=${#a[@]}

for ((i=0; i<$length; i++))
do
    echo ${a[$i]}
done
#echo ${a[2]}

執行結果:

a
b
c

3。數組的其他動作

#!/bin/bash
str="a b --n dd"
array=($str)
length=${#array[@]}

#ouput the first array element直接輸出的是數組的第一個元素
echo $array

#Use subscript way access array用下標的方式訪問數組元素
echo ${array[1]}

#Output the array輸出這個數組
echo ${array[@]}

#Output in the array subscript for 3 the length of the element輸出數組中下標為3的元素的長度
echo ${#array[3]}

#Output in the array subscript 1 to 3 element輸出數組中下標為1到3的元素
echo ${array[@]:1:3}

#Output in the array subscript greater than 2 elements輸出數組中下標大於2的元素
echo ${array[@]:2}

#Output in the array subscript less than 2 elements輸出數組中下標小於2的元素
echo ${array[@]::2}

執行結果:

a
b
a b --n dd
2
b --n dd
--n dd
a b

4。遍曆訪問一個字串(預設是以空格分開的,當字串是以其他分隔字元分開時可以參考2)

#!/bin/bash
str="a --m"
for i in $str
do
    echo $i
done

執行結果:

a
--m

5。如何使用echo輸出一個字串str="-n". 由於-n是echo的一個參數,所以一般的方法echo "$str"是無法輸出的.
解決方案可以有:


echo x$str | sed 's/^x//'
echo -ne "$str\n"
echo -e "$str\n\c"
printf "%s\n" $str(這樣也可以)


1、從“標準輸入”讀入n次字串,每次輸入的字串儲存在數組array裡


#!/bin/bash
i=0
n=5
while [ "$i" -lt $n ] ; do
  echo "Please input strings ... `expr $i + 1`"
  read array[$i]
  b=${array[$i]}
  echo "$b"
  i=`expr $i + 1`
done
2、將字串裡的字母逐個放入數組,並輸出到“標準輸出”


#!/bin/bash
chars='abcdefghijklmnopqrstuvwxyz'
for (( i=0; i<26; i++ )) ; do
    array[$i]=${chars:$i:1}
    echo ${array[$i]}
done
這裡有趣的地方是 ${chars:$i:1},表示從chars字串的 $i 位置開始,擷取 1 個字元。如果將 1 改為 3 ,就擷取 3 個字元啦~ 結果是:
abc
bcd
...
vxy
xyz
yz     //沒有足夠字串擷取了
z      //沒有足夠字串擷取了
下面介紹將數組應用到shell環境變數的一些例子。

3、將數組應用到shell環境變數(1)


數組賦值:
[root@pps ~]# SEASON=("Srping" "Summer" "Autumn" "Winter")
當你發現賦值錯了,也可以立刻從新賦值糾正,如上面的 Spring 被寫成 Srping。
重新賦值:(原來的值被重寫)
[root@pps ~]# SEASON=("Spring" "Summer" "Autumn" "Winter")

查看一下環境變數:
[root@pps ~]# set | grep SEASON
SEASON=([0]="Spring" [1]="Summer" [2]="Autumn" [3]="Winter")

顯示整個數組:
[root@pps ~]# echo ${SEASON[*]}  或者 echo ${SEASON[@]}
Spring Summer Autumn Winter

顯示某一數組元素:
[root@pps ~]# echo ${SEASON[3]}
Winter

給單個數組元素賦值:
[root@pps ~]# SEASON[0]="New_Spring"

再查看一下看數組:
[root@pps ~]# echo ${SEASON[*]}
New_Spring Summer Autumn Winter

清除指定的單個數組元素:
[root@pps ~]# unset SEASON[2]

清除整個數組:
[root@pps ~]# unset SEASON
4、將數組應用到shell環境變數(2)
使用tr命令將檔案中的斷行符號轉換成空格:


[root@pps ~]# cat /etc/shells | tr "\n" " " > /tmp/tmp.file

將檔案中內容給數組賦值:(碰到第一個斷行符號符之前的內容)


[root@pps ~]# read -a SHELLS < /tmp/tmp.file

查看數組賦值情況:


[root@pps ~]# set | grep "SHELLS"
SHELLS=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/ksh")

後面可以將這個數組環境變數應用到其它的SHELL指令碼或者應用程式裡了

數組的提取
從尾部開始提取:

array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一個元素後所有元素,那麼${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three
子串刪除


[root@localhost dev]# echo ${array[@]:0}
one two three four
[root@localhost dev]# echo ${array[@]#t*e} # 左邊開始最短的匹配:"t*e",這將匹配到"thre"
one two e four
[root@localhost dev]# echo ${array[@]##t*e} # 左邊開始最長的匹配,這將匹配到"three"
[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )
[root@localhost dev]# echo ${array[@] %o} # 從字串的結尾開始最短的匹配
one tw three four
[root@localhost dev]# echo ${array[@] %%o} # 從字串的結尾開始最長的匹配
one tw three four
子串替換

[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )
第一個匹配到的,會被刪除

[root@localhost dev]# echo ${array[@] /o/m}
mne twm three fmur
所有匹配到的,都會被刪除

[root@localhost dev]# echo ${array[@] //o/m}
mne twm three fmur
沒有指定替換子串,則刪除匹配到的子符

[root@localhost dev]# echo ${array[@] //o/}
ne tw three fur
替換字串前端子串

[root@localhost dev]# echo ${array[@] /#o/k}
kne two three four
替換字串後端子串

[root@localhost dev]# echo ${array[@] /%o/k}
one twk three four

好了到這裡關於shell命令的數組操作就總結到了這裡,希望能協助各位。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.