很多情况下我们需要有种类型来存储数据,在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+devops1
- beijing+http://10.0.1.202+boge+devops2
- hongkong+http://10.0.1.203+boge+devops3
- )
-
-
- for r in `echo ${regions}`
- do
- 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_URL
- echo $MY_USERNAME
- echo $MY_PASSWORD
- echo $MY_REGION
- echo "====== $r END ======"
- done
-
-
- # 另外一种实现字典的形式
- #!/bin/bash
-
-
- test='
- {
- "aaa": 1,
- "bbb": 2,
- "ccc": 3
- }
- '
-
- echo $test|jq -r ".aaa"