一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

linux中shell脚本数组的操作教程

时间:2014-11-28 编辑:简简单单 来源:一聚教程网

数组赋值: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命令的数组操作就总结到了这里,希望能帮助各位。

热门栏目