概述
本文介绍了在编写 Linux Bash Shell 脚本时,用于处理交互式用户输入和解析文本数据必不可少的 read 命令核心用法。内容涵盖从基础输入处理、密码隐藏(-s)、超时控制(-t)、分隔符切分(IFS),到实际工作中最为常用的基于 while 循环的文件逐行读取技术。
1. read 命令基础、提示符(-p)及默认值设置
运行 mkdir -p ~/read-demo && cd ~/read-demo 命令,创建用于 read 命令实践的专属目录并切换进入。

read 命令从标准输入读取一行并存入变量中,可以使用 -p 选项输出提示信息,并通过 ${变量名:-默认值} 语法在变量为空时代入默认值。
在执行结果中,由于未直接向 read 命令传递输入,username 变量保持为空,因此根据 ${username:-guest} 语法输出了默认值 guest。
⚙️ [主要选项]
-p : 指定在接收输入前显示在屏幕上的提示字符串。-s : 启用密码等敏感信息输入时的静默模式,不在屏幕上回显输入字符。-t : 设置输入等待超时时间(秒),超过指定时间则终止输入。-n : 仅读取指定数量的字符,无需按回车键即可立即结束输入。-r : 不将反斜杠(\)解析为转义字符,原样读取原始内容。-a : 将输入的词按空格分割并按顺序存储到数组变量中。-d : 自定义用于结束输入的定界符(delimiter),以替代默认的换行符。

2. 密码隐藏(-s)与输入超时限制(-t)处理
运行 cd ~/read-demo 命令切换到先前创建的 ~/read-demo 目录,以继续后续实践。

使用 -s 选项隐藏输入字符,并使用 -t 5 选项设置 5 秒超时限制来接收输入。
密码在超时时限内正常传递,退出状态码($?)输出为 0。

3. 利用分隔符(IFS)与 -a 选项进行多变量与数组分割
运行 cd ~/read-demo 命令切换到先前创建的 ~/read-demo 目录,以继续后续实践。

将内部字段分隔符(IFS)指定为逗号(,),然后使用 read 命令读取通过 Here-String(<<<)传递的 CSV 格式字符串,分别拆分存储到 col1、col2 和 col3 变量中。
执行结果显示,字符串中包含的服务器名称、IP 地址和服务名称已按照指定的分隔符正确拆分并输出到各变量中。

将分隔符(IFS)设置为冒号(:),并结合 -a 选项,将 /etc/passwd 格式的字符串拆分并存储到 user_info 数组变量中。
数组索引为 0 的用户名(root)与索引为 6 的登录 Shell 路径(/bin/bash)被成功提取并打印。
![bash -c ‘IFS=":" read -ra user_info «< “root:x:0:0:root:/root:/bin/bash”; echo “계정명: ${user_info[0]}, 셸: ${user_info[6]}”’](/ubuntu/20261007_143401_98/captures/s03_c03_bash_-c__IFS_____read_-ra_user_info______root_x_0.png)
4. 实战核心:利用 while 循环与 read -r 逐行处理大文件
运行 cd ~/read-demo 命令切换到先前创建的 ~/read-demo 目录,以继续后续实践。

为了实践文件逐行处理,创建包含逗号分隔的服务器名称及运行状态的示例 CSV 文件 servers.csv。

结合使用 while 循环和 read -r 命令,并将内部字段分隔符(IFS)指定为逗号(,),安全地逐行读取 servers.csv 文件中的每一行。
执行结果显示,文件中记录的各服务器名称与状态信息已正确分别赋值给 name 和 status 变量,并按指定格式输出。
![while IFS="," read -r name status; do echo “[상태 점검] $name 서버는 현재 $status 상태입니다.”; done < servers.csv](/ubuntu/20261007_143401_98/captures/s04_c03_while_IFS_____read_-r_name_status__do_echo___%EC%83%81%ED%83%9C_%EC%A0%90%EA%B2%80.png)
以上简要介绍了在 Linux Shell 脚本中 read 命令的基本用法以及实际工作中常用的文件逐行读取技巧。
建议根据今天整理的各种选项与示例,动手编写适合自身场景的交互式自动化脚本。