💜 想真正擅长编程? 从一门课程开始,100% 免费

第7节:数组与字符串

一、课程目标

  • 掌握 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}