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
相关推荐
JunLan~32 分钟前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
方竞2 小时前
Linux空口抓包方法
linux·空口抓包
sun0077002 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
海岛日记3 小时前
centos一键卸载docker脚本
linux·docker·centos
AttackingLin3 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
吃肉不能购4 小时前
Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪
运维·yolo·自动化
学Linux的语莫4 小时前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible
qq_312920115 小时前
docker 部署 kvm 图形化管理工具 WebVirtMgr
运维·docker·容器