很多情况下我们需要有种类型来存储数据,在python中有列表和字典,golang中有切片slice和map,那么在shell中,我们能否实现列表和字典呢,答案是肯定的,下面跟着博哥的示例来一步步掌握在shell中实现列表和字典的方法吧。
-------------
SHELL数组(实现列表)
-------------
# family=(aaa bbb ccc) <--- 定义数组
# echo ${#family[*]} <--- 取数组里变量长度
3
# echo ${family[0]} <--- 取数组第一个变量
aaa
# echo ${family[1]} <--- 取数组第二个变量
bbb
# echo ${family[2]} <--- 取数组第三个变量
ccc
# echo ${family[*]} <--- 取数组里所有变量
aaa bbb ccc
# echo ${family[*]:2} <--- 去掉数组里的前两个值,保持取最后一个值
ccc脚本示例:
# vim test.sh
#!/bin/bash
family=( # or 也可以这样定义 family=(aaa bbb ccc)
aaa
bbb
ccc
)for name in ${family[*]} #第一种方法,常规for循环取值的方式
do
echo $name
done
echo "================="
for ((name=0;name<${#family[*]};name++)) #第二种方法
do
echo ${family[name]}
done执行结果:
[root@nfs-server scripts]# bash test.sh
aaa
bbb
ccc
=================
aaa
bbb
ccc实现"字典":my_config=(shanghai+http://10.0.1.201+boge+devops1beijing+http://10.0.1.202+boge+devops2hongkong+http://10.0.1.203+boge+devops3
)for r in `echo ${regions}`
doexport MY_REGION=`echo ${my_config[@]}|tr " " "\n"|grep -w $r|awk -F+ '{print $1}'`export MY_URL=`echo ${my_config[@]}|tr " " "\n"|grep -w $r|awk -F+ '{print $2}'`export MY_USERNAME=`echo ${my_config[@]}|tr " " "\n"|grep -w $r|awk -F+ '{print $3}'`export MY_PASSWORD=`echo ${my_config[@]}|tr " " "\n"|grep -w $r|awk -F+ '{print $4}'`echo "====== $r START ======"echo $MY_URLecho $MY_USERNAMEecho $MY_PASSWORDecho $MY_REGIONecho "====== $r END ======"
done# 另外一种实现字典的形式
#!/bin/bashtest='
{"aaa": 1,"bbb": 2,"ccc": 3
}
'echo $test|jq -r ".aaa"