实现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"
相关推荐
XIAOHEZIcode19 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉5 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦5 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw