Linux read命令是bash等主流shell环境的内置命令,核心作用是从标准输入(通常是终端键盘输入)读取数据,并将读取到的内容赋值给一个或多个指定的变量,是shell脚本实现用户交互、数据读取功能的基础工具。

read命令的基本用法
read命令最基础的语法是read 变量名,执行后会暂停脚本运行,等待用户输入内容并按回车,输入的内容会被存入指定的变量中。
下面是一个简单的交互示例,脚本会提示用户输入姓名,然后输出欢迎信息:
#!/bin/bash # 提示用户输入姓名 echo "请输入你的姓名:" # 读取用户输入的内容,存入name变量 read name # 输出欢迎信息 echo "欢迎你,$name"
read命令的常用参数
read命令支持多个实用参数,能够满足不同的使用场景,常用的参数如下:
| 参数 | 作用说明 |
|---|---|
| -p | 直接在命令中指定输入提示信息,无需单独使用echo输出提示 |
| -t | 设置输入超时时间,单位为秒,超时后自动跳过读取步骤 |
| -s | 静默模式,输入的内容不会显示在终端上,适合读取密码等敏感信息 |
| -n | 指定读取的字符数,达到指定数量后自动结束输入,无需按回车 |
| -a | 将读取的内容赋值给数组,按空格分隔每个数组元素 |
参数使用示例
使用-p参数合并提示和读取步骤:
#!/bin/bash # 带提示的直接读取,无需单独写echo read -p "请输入你的年龄:" age echo "你的年龄是:$age"
使用-t和-s参数读取超时密码:
#!/bin/bash
# 10秒内输入密码,输入内容不显示
read -t 10 -s -p "请输入密码(10秒超时):" password
# 判断是否超时,如果超时的话read命令会返回非0值
if [ $? -ne 0 ]; then
echo -e "n输入超时,密码未设置"
else
echo -e "n密码已成功录入"
fi
read命令读取多个变量
read命令可以同时读取多个变量,用户输入的内容会按空格或制表符分隔,依次赋值给后面的变量,如果输入的内容数量多于变量数量,剩余的内容会全部赋值给最后一个变量。
#!/bin/bash read -p "请输入你的姓名、年龄、所在城市:" name age city echo "姓名:$name" echo "年龄:$age" echo "城市:$city"
read命令读取文件内容
read命令也可以配合输入重定向读取文件的每一行内容,通常结合while循环使用,逐行处理文件数据。
#!/bin/bash
# 读取test.txt文件的每一行,输出行号和内容
line_num=1
while read line_content
do
echo "第$line_num行:$line_content"
line_num=$((line_num + 1))
done < test.txt
上述代码中,done < test.txt是将test.txt文件的内容作为read命令的输入源,循环会逐行读取文件内容,直到文件结束。
注意事项
- 如果read命令没有指定变量,读取的内容会默认存入环境变量
REPLY中 - 输入的内容如果包含空格,会被作为同一个变量的内容,只有分隔符才会拆分到不同变量
- 使用
-n参数时,指定的是字符数,包括回车符,所以实际可见的输入字符数会比指定的少1