shell数组

1.数组的定义

arr=(1 2 3 4 5 6) 

2.数组元素的读取

echo ${arr[0]} #输出arr[0] 
# 1
echo ${arr[*]} #输出整个数组内容
# 1 2 3 4 5 6
echo ${arr[@]} #输出整个数组内容
# 1 2 3 4 5 6

3.遍历数组 (for 循环)

for 变量名 in 循环的条件
do
	command
done

如:

for i in $[arr[*]}
do
	echo $i
done

4.数组的长度

 ${#数组名[*或@]}
echo ${#arr[@]}
# 6

5.赋值

arr[6]=7
echo ${arr[*]}
# 1 2 3 4 5 6 7

6.分片 格式:
${数组名[*或@]:起始位:长度},截取部分数组,返回字符串,中间用空格分隔;
将结果使用“()”,则得到新的切片数组

echo ${arr[@]:0:4}
# 1 2 3 4
arr1=(${arr[@]:0:4})
echo ${arr1[*]}
# 1 2 3 4

7.替换元素,格式:
${数组名[*或@]/查找字符/替换字符}, 不会修改原数组;
如需修改的数组,将结果使用“()”赋给新数组

echo ${arr[*]}
# 1 2 3 4 5 6 7
echo ${arr[*]/7/99}
# 1 2 3 4 5 6 99
arr2=(${arr[*]/7/99})
echo ${arr2[*]}
# 1 2 3 4 5 6 99

8.删除数组 格式:
unset 数组 清除整个数组;
unset 数组[下标],清除单个元素

echo ${arr[@]}
# 1 2 3 4 5 6 7 
unset arr[0]
# 2 3 4 5 6 7
unset arr
# 没有元素

例:写一个脚本让用户输入多个城市的名字(可以是中文),要求不少于5个,然后把这些城市存到一个数组里,最后用一个for循环把他们打印出来。

#!/bin/bash  

read -p "请输入至少5个城市的名字,用空格分隔:" city
	#用一个字符串来存储五个城市,中间用空格分开
n=`echo $city|awk '{print NF}'`
	#空格为AWK的默认分隔符,NF为字段数
if [ $n -lt 5 ]
then
    echo "输入的城市个数至少为5"
    exit
fi

name=($city) #赋值

for i in ${name[@]}
do
    echo $i

posted @ 2017-11-23 11:08  黑蒜  阅读(108)  评论(0编辑  收藏  举报