实现SHELL中的列表和字典效果

很多情况下我们需要有种类型来存储数据,在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"
相关推荐
努力努力再努力wz2 分钟前
【Docker入门系列】:从架构演进到容器化:一文建立 Docker、虚拟化与 Namespace 的底层心智模型
运维·开发语言·数据结构·c++·docker·容器·架构
光电笑映11 分钟前
Linux 线程编程:从进程、分页到线程控制与封装
linux·运维·服务器·c++
wzg201629 分钟前
本地部署Deepseek-coder + Vscode + Continue 插件(3)启动与关闭deepseek-coder大模型
linux·运维·服务器
凯哥Java30 分钟前
接口采集工具自动化验证文章(测试发布,可删除)
运维·自动化
新时代牛马36 分钟前
Linux 块设备驱动完整篇:从gendisk、submit_bio 到blk-mq queue_rq 与排障
linux·运维·服务器
德迅云安全杨德俊1 小时前
裸金属服务器的运用与适用场景
运维·服务器
wdfk_prog1 小时前
Docker 29 与 containerd image store:镜像为什么会保存两种形态
运维·docker·容器
广州灵眸科技有限公司1 小时前
灵眸科技EAI3572-Core-L核心板即将发布!八核+4TOPS NPU,面向工业与边缘AI
linux·运维·服务器·数据库·yolo
流浪0011 小时前
Linux系统篇28——通信(五):信号量专篇:从电影院订票到内核一张大表,把信号量一次讲透
linux·运维·服务器
张洛闻Eren2 小时前
云原生k8s【第七课】:集群监控与可观测性
linux·运维·docker·云原生·容器·kubernetes·k8s