在 Linux 系统中,Shell 脚本是自动化任务的得力助手。而Shell 数组与文件操作的结合,更是让脚本变得强大灵活。无论你是刚接触 Linux 的小白,还是希望提升脚本技能的用户,本文都将带你一步步理解如何使用 Shell 数组来读取、处理和写入文件内容。
Shell 数组是一种可以存储多个值的变量类型。在 Bash(最常用的 Shell)中,数组默认是索引数组(从 0 开始编号),也可以使用关联数组(键值对形式,需 Bash 4.0+)。
# 方法一:逐个赋值arr[0]="apple"arr[1]="banana"# 方法二:一次性定义arr=("apple" "banana" "cherry")# 方法三:使用 declare 声明declare -a arr=("apple" "banana" "cherry") echo ${arr[0]} # 输出 appleecho ${arr[@]} # 输出所有元素echo ${#arr[@]} # 输出数组长度(元素个数) 在 Shell 中,读写文件非常简单。常见的操作包括:逐行读取、追加内容、覆盖写入等。这些操作常与循环结构配合使用。
while IFS= read -r linedo echo "$line"done < filename.txt
这段代码会逐行读取 filename.txt 文件并打印每一行。
这是Shell 数组与文件操作结合的核心技巧。我们可以把文件的每一行存入数组的一个元素中,便于后续处理。
mapfile 是 Bash 内置命令,专门用于将文件内容读入数组。
mapfile -t lines < filename.txt# 打印所有行echo "${lines[@]}"# 打印第2行(索引为1)echo "第二行内容:${lines[1]}" declare -a linesindex=0while IFS= read -r linedo lines[index]="$line" ((index++))done < filename.txtecho "共读取 ${#lines[@]} 行" 处理完数据后,我们常常需要将结果保存到文件中。这可以通过循环或直接输出实现。
# 将数组每行写入新文件printf "%s\n" "${lines[@]}" > output.txt # 在现有文件末尾追加printf "%s\n" "new_line1" "new_line2" >> output.txt
假设你有一个日志文件 app.log,你想提取包含“ERROR”的行并保存到 errors.log 中。
#!/bin/bash# 读取日志文件到数组mapfile -t log_lines < app.log# 创建空数组存储错误行declare -a error_lines# 遍历数组,筛选包含 ERROR 的行for line in "${log_lines[@]}"do if [[ "$line" == *"ERROR"* ]]; then error_lines+=("$line") fidone# 写入错误日志printf "%s\n" "${error_lines[@]}" > errors.logecho "已提取 ${#error_lines[@]} 条错误日志到 errors.log" mapfile 比手动循环更高效、简洁。#!/bin/bash 声明解释器。通过本文,你已经掌握了如何在 Linux Shell 中使用数组进行文件读写操作。无论是日志分析、配置管理还是数据处理,Shell 数组与文件操作的组合都能大幅提升你的工作效率。多加练习,你很快就能写出高效、实用的 Shell 脚本!
关键词:Linux Shell数组、Shell文件操作、Shell脚本教程、数组处理文件
本文由主机测评网于2025-11-30发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025111460.html