在Shell脚本编程中,变量是存储和操作数据的基础。掌握变量的高级特性,能让我们编写出更高效、灵活的脚本。本文将深入探讨Shell脚本中数组和关联数组等高级变量的使用。
在深入高级特性之前,先简单回顾下基础变量。在Shell中,定义变量无需声明类型,例如:
name="John"
echo $name
上述代码定义了一个名为name
的变量并赋值为John
,然后输出该变量的值。
在Bash中,可以使用以下方式定义和初始化数组:
# 方式一
fruits=("apple" "banana" "cherry")
# 方式二
declare -a vegetables
vegetables[0]="tomato"
vegetables[1]="cucumber"
vegetables[2]="carrot"
通过索引来访问数组元素,索引从0开始:
echo ${fruits[0]} # 输出 apple
echo ${vegetables[1]} # 输出 cucumber
获取数组长度:
echo ${#fruits[@]} # 输出 3
获取数组所有元素:
echo ${fruits[@]} # 输出 apple banana cherry
关联数组使用字符串作为索引,需要先声明:
declare -A colors
colors["red"]="#FF0000"
colors["green"]="#00FF00"
colors["blue"]="#0000FF"
通过关联的键来访问值:
echo ${colors["red"]} # 输出 #FF0000
获取所有键:
echo ${!colors[@]} # 输出 red green blue
获取所有值:
echo ${colors[@]} # 输出 #FF0000 #00FF00 #0000FF
假设有一批日志文件,需要统计每个文件的行数,可以使用数组存储文件名:
files=(*.log)
for file in ${files[@]}
do
count=$(wc -l < $file)
echo "$file has $count lines"
done
使用关联数组统计系统资源使用情况:
declare -A sys_stats
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
mem_usage=$(free -m | awk 'NR==2{print $3}')
sys_stats["CPU"]=$cpu_usage
sys_stats["Memory"]=$mem_usage
echo "CPU Usage: ${sys_stats["CPU"]}%"
echo "Memory Usage: ${sys_stats["Memory"]}MB"