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

二、关联数组

1、关联数组的定义
首先,需要使用声明语句将一个变量声明为关联数组。如:

declare -A ass_array
#-A 关联数组
#-a 普通数组

声明之后,可以用两种方法将元素添加到关联数组中。

利用内嵌“索引-值”列表的方法,提供一个“索引-值”列表:

ass_array=([index1]=val1 [index2]=val2)

使用独立的“索引-值”进行赋值:

ass_array[index1]=val1
ass_array[index2]=val2
declare -A fruits
fruits=([apple]='100 dollars' [orange]='150 dollars')
echo "Apple costs ${fruits[apple]}"
#100 dollars

列出列表的索引
echo ${!ass_array[*]}
#orange apple
列出列表的键值
echo ${ass_array[*]}    #与普通数组类似
100 dollars 150 dollars

(注:shell的数组,关联数组与awk 的数组不同,需要注意区分!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值