read 是 shell 脚本中用于交互式输入的核心命令,支持带提示(-p)、超时(-t)、禁用转义(-r)、多变量赋值、数组接收及自定义分隔符(ifs)等功能,并需注意密码隐藏(-s)、空输入判断和终端环境检测等健壮性实践。

read 是 Shell 脚本中最常用的交互式输入命令,它能从标准输入读取一行内容并赋值给变量。配合 -t(超时)和 -p(提示符)等选项,可轻松实现带提示、有等待时限的用户输入逻辑。
基础用法:读取一行并存入变量
最简单的形式是直接读取用户输入并保存到变量中:
-
read name —— 等待用户输入,回车后将整行内容赋给变量
name - read -p "请输入姓名: " name —— 显示提示文字,不换行,更友好
-
read -r line —— 加
-r可避免反斜杠被当作转义处理(推荐在读取任意文本时使用)
设置输入超时:避免脚本无限等待
用 -t 秒数 可限制用户响应时间,超时后自动继续执行,$? 返回 1;正常输入则返回 0:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
if read -t 5 -p "5秒内输入y继续: " choice; then
echo "收到输入: $choice"
else
echo "超时,跳过操作"
fi - 超时值支持小数,如
-t 0.5表示半秒;设为 0 则立即返回(常用于检测输入是否就绪)
读取多个变量或特定字段
read 可一次性将输入按空白符切分,分别赋给多个变量:
-
read first last —— 输入
zhang san后,first=zhang,last=san -
read -a arr —— 用数组接收所有字段,
${arr[0]}、${arr[1]}依次访问 -
IFS=':' read user pass —— 指定分隔符为冒号,适合解析类似
admin:123456的输入
安全与健壮性建议
实际脚本中需注意边界情况:
- 始终加
-r,防止输入含反斜杠时行为异常 - 敏感输入(如密码)应禁用回显:read -s -p "密码: " pwd
- 空输入需主动判断:[[ -z "$input" ]] && echo "输入为空"
- 在非终端环境(如 cron 或重定向输入)中,
read可能立即失败,建议先用[ -t 0 ]检查是否连接了终端










