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