一、课程目标
- 掌握 Shell 中一维数组的定义与读取方式
- 学会遍历数组与统计数组元素
- 理解字符串的分割、替换与处理技巧
- 通过实战掌握配置文件批量修改技巧
二、数组基础
1️⃣ 数组定义
Shell
# 定义一维数组
fruits=("apple" "banana" "orange")
# 也可以分步赋值
fruits[0]="apple"
fruits[1]="banana"
fruits[2]="orange"
📘 提示: Shell(bash)中仅支持一维数组,索引从 0 开始。
2️⃣ 数组读取
Shell
# 获取单个元素
echo ${fruits[1]} # 输出 banana
# 获取所有元素
echo ${fruits[@]} # 输出 apple banana orange
# 获取数组长度
echo ${#fruits[@]} # 输出 3
3️⃣ 数组遍历
Shell
# 遍历数组
for item in "${fruits[@]}"
do
echo "水果:$item"
done
输出结果:
plain
水果:apple
水果:banana
水果:orange
4️⃣ 数组追加与删除
Shell
# 追加元素
fruits+=("pear" "grape")
# 删除某个元素
unset fruits[1]
# 再次查看
echo ${fruits[@]} # apple orange pear grape
三、字符串分割
1️⃣ 按分隔符拆分字符串
Shell
text="java,python,go,rust"
# 将字符串按逗号拆分成数组
IFS=',' read -r -a langs <<< "$text"
# 遍历输出
for lang in "${langs[@]}"
do
echo "语言:$lang"
done
📘 解释:
IFS(Internal Field Separator)定义分隔符read -a用于读取到数组中
四、字符串替换
1️⃣ 简单替换
Shell
str="I love java"
echo ${str/java/python} # 输出 I love python
2️⃣ 全局替换
Shell
str="java java java"
echo ${str//java/python} # 输出 python python python
3️⃣ 删除前后缀
Shell
filename="backup_2025.tar.gz"
# 删除最短匹配前缀
echo ${filename#backup_} # 输出 2025.tar.gz
# 删除最长匹配后缀
echo ${filename%%.*} # 输出 backup_2025
五、实战案例 🧩
📘 场景:批量修改配置文件中的特定字段
假设你有多个配置文件,内容如下:
plain
# config1.conf
PORT=8080
ENV=dev
# config2.conf
PORT=9090
ENV=prod
现在需要统一修改 ENV 字段为 test 环境。
示例脚本:update_env.sh
Shell
#!/bin/bash
# 遍历当前目录下的所有 .conf 文件
for file in *.conf
do
echo "正在修改:$file"
# 使用 sed 进行替换
sed -i 's/^ENV=.*/ENV=test/' "$file"
done
echo "✅ 所有配置文件已更新为 ENV=test"
运行后:
plain
正在修改:config1.conf
正在修改:config2.conf
✅ 所有配置文件已更新为 ENV=test
📘 实战讲解要点:
- 遍历文件 → for + 通配符
- 正则替换 →
sed - 批量执行 → 循环体
六、课后练习 🧮
练习 1:统计字符串中字符出现次数
编写脚本 count_char.sh
要求:
- 用户输入一个字符串
- 程序统计每个字符出现的次数
示例输出:
Shell
请输入字符串:hello
h:1
e:1
l:2
o:1
提示思路:
Shell
#!/bin/bash
read -p "请输入字符串:" str
for (( i=0; i<${#str}; i++ ))
do
char=${str:i:1}
count=$(echo "$str" | grep -o "$char" | wc -l)
echo "$char:$count"
done
七、本章小结
| 知识点 | 关键命令 / 符号 |
|---|---|
| 定义数组 | arr=(a b c) |
| 访问元素 | ${arr[i]} |
| 遍历数组 | for i in "${arr[@]}" |
| 字符串分割 | IFS=',' read -r -a arr <<< "$str" |
| 字符串替换 | ${str/old/new} |
/${str//old/new} |
|
| 删除前后缀 | ${str#prefix} |
${str%%suffix} |