19-字典
原创大约 3 分钟
编写代码,很多情况下我们需要有种类型来存储数据,在python中有列表和字典,golang中有切片slice和map。
简单数组
-------------
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[@]} <--- 取数组里所有变量
aaa bbb ccc
# echo ${family[*]:2} <--- 去掉数组里的前两个值,保持取最后一个值
ccc简单脚本
# vim test.sh#!/bin/bash
family=(
aaa
bbb
ccc
)
# or 也可以这样定义 family=(aaa bbb ccc)
#第一种方法,常规for循环取值的方式
for name in ${family[*]}
do
echo $name
done# bash test.sh
aaa
bbb
ccc实现"字典"
#!/bin/bash
my_config=(
shanghai+http://10.0.1.201+hong+devops1
beijing+http://10.0.1.202+hong+devops2
hongkong+http://10.0.1.203+hong+devops3
)
regions=$1
for r in `echo ${regions}`
do
# tr " " "\n":将字符串中所有空格替换为换行符,以便每个元素占据一行
# grep -w 全词搜索
# awk -F+ 使用+作为字段分隔符,从前一个命令输出的每行文本中提取第一个字段并将其输出
export 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_REGION
echo $MY_URL
echo $MY_USERNAME
echo $MY_PASSWORD
echo "=========== $r END ==========="
done运行
单个
# bash my_config.sh shanghai
=========== shanghai START ===========
shanghai
http://10.0.1.201
hong
devops1
=========== shanghai END ===========多个
反斜杠(\)是用作转义字符,它的作用是告诉命令行解释器将空格视为参数值的一部分而不是参数之间的分隔符。
# bash my_config.sh shanghai\ hongkong
=========== shanghai START ===========
shanghai
http://10.0.1.201
hong
devops1
=========== shanghai END ===========
=========== hongkong START ===========
hongkong
http://10.0.1.203
hong
devops3
=========== hongkong END ===========jq实现字典
jq工具需要安装
#!/bin/bash
test='
{
"aaa": 1,
"bbb": 2,
"ccc": 3
}
'
echo $test|jq -r ".aaa"