shell中关于数组的使用

shell中关于数组的使用

在Shell中,数组是一种可以存储多个值的变量。数组的每个值都由一个数字索引来访问。在Shell中,数组的索引从0开始。

数组的常见的使用方法包括

  • 数组的定义
  • 数组的打印
  • 数组长度
  • 数组的遍历
  • 数组元素的打印
  • 数组元素的添加
  • 数组元素的删除

数组的定义

复制代码
# 定义数组
list=("value1" "value2" "value3")

数组的长度

复制代码
   echo ${#list[*]}
   echo ${#list[@]}

数组元素的输出

shell(这里指常用的bash)中数组的下标与c,python,go等编程语言一样 ,下标是0开始的;

复制代码
list=(value1 value2 value3);echo $list[0]  // value1
list=(value1 value2 value3);echo $list[1]  // value2
list=(value1 value2 value3);echo $list[3]  // value3

特别注意,/bin/zsh的下标是从1开始,而不是0开始

复制代码
(base) {14:45}~/script ➭ echo $SHELL
/bin/zsh
(base) {14:45}~/script ➭ list=(value1 value2 value3);echo ${list[0]} // 输出为空

(base) {14:45}~/script ➭ list=(value1 value2 value3);echo ${list[1]} // 输出为value1
value1

数组的遍历

复制代码
# 遍历方式一
for i in ${list[@]}
do
   echo $i
done

# 遍历方式二
for((i=0;i<${#list[*]};i++))
do
   echo ${list[$i]}
done

数组元素的打印

复制代码
echo ${list[*]}
echo ${list[@]}

echo ${list} 等价于echo ${list[0]}

数组元素的添加

没有直接的方法添加元素,可以将原数组中的所有元素与新添加元素定义为一个新数组,并加新数组的内"覆盖"原同名的数组。

复制代码
list=("${list[*]}" "value4")

# 实践:
list=(value1 value2 value3);list=("${list[*]}" "value4");echo ${list[*]}  // value1 value2 value3 value4

数组元素的删除

使用unset与${list\*}来删除数组某个元素

复制代码
list=(value1 value2 value3)
unset 'list[1]'
list=("${list[*]}")

# 实践,删除第二元素
list=(value1 value2 value3);unset "list[2]";list=("${list[*]}");echo ${list[*]} // value1  value3

示例

在初始化服务器环境时,需要安装很多软件包,这时可以先定义一个数组,再遍历数组并依次安装数据包

复制代码
#!/bin/bash

list=(vmi iotop fio htop)

for i in ${list[*]}
do
  apt install -y $i
done
相关推荐
爱笑鱼7 分钟前
Android 系统启动机制(七):进入 SystemServer.main() 以后,system_server 还是一个空进程吗?
android·linux
王的宝库14 分钟前
Linux 性能优化入门
linux·学习
众壹新能源科技29 分钟前
经营口径与运维口径不一致时,发电量报表怎么对账
运维·数据库·人工智能
2601_9621007342 分钟前
2026年旧素材怎么二次利用:图文批量转视频的自动化工作流工程复盘
运维·自动化·音视频
Ruiery1 小时前
Linux 6.6内核 PCIe 深度解析(九):复位机制 — 从 FLR 到 Secondary Bus Reset 的降级链
linux·运维·服务器
Wang's Blog1 小时前
Vibe Coding一人即团队系列59:基于PPTmaster与Claude Desktop的本地可编辑PPT自动化生成方案
运维·自动化·powerpoint
不剪发的Tony老师1 小时前
Navop:一款工具搞定数据库、SSH、SFTP、远程桌面、AI Agent
运维·数据库·ssh
学烹饪的小胡桃1 小时前
WGCLOUD支持哪些告警方式
linux·运维·服务器·网络·安全
qq7590353661 小时前
2026 docker部署Hub 监控中心管理多台服务器硬盘和内存
运维·服务器
weixin_440730502 小时前
socket简单介绍-三次握手四次断开+一个例子
运维·服务器