read命令是处理从键盘或其它输入设备读入字符的一个简单命令。常见用法就是在shell脚本中用来读取用户的输入。除此之外,也可以从文件中读取内容或处理由其它命令输出的内容。
read命令在所有主流的Linux发行版中,如Ubuntu、Debian、Fedora、Red Hat、CentOS等,都已默认安装。
语法格式:
read [ -options ] [ 赋值变量名 ]
选项 | 说明 |
---|---|
-p | 提示信息 |
-t | 等待时间 |
-n | 输入字符数 |
-s | 静默模式 |
不添加任何参数的情况下,read的默认行为是读取一个变量。我们将演示如何将用户输入分配给一个变量。
[linux@bashcommandnotfound.cn ~]$ read var1
# 请求输入
[linux@bashcommandnotfound.cn ~]$ echo $var1
# 输出输入的内容
read命令不仅可以读取单个变量,还可以读取并分配多个变量。当你一次性输入多个值时,这个功能就显得十分有用。
[linux@bashcommandnotfound.cn ~]$ read var1 var2 var3
# 请求输入
[linux@bashcommandnotfound.cn ~]$ echo $var1 $var2 $var3
# 输出输入的内容
在某些时候,你可能想在请求用户输入数据之前提供一些提示或指示。 可以使用-p选项来实现这个需求。
[linux@bashcommandnotfound.cn ~]$ read -p "Enter your name: " name
# 输出提示并请求输入
[linux@bashcommandnotfound.cn ~]$ echo Hello, $name!
# 输出提示
我们可以使用read
命令读取并显示文件内容,将文件的每一行作为输入。
[linux@bashcommandnotfound.cn ~]$ while IFS= read -r line; do echo "$line"; done < file.txt
# 输出文件内容
这个例子使用while
循环和read
命令一行一行地读取file.txt
文件的内容。然后使用echo
命令输出每一行。
在一些脚本中,你可能希望在指定的时间内等待用户的输入,超过这个时间就停止等待。read
命令提供了一个-t
选项可以实现这个需求。
[linux@bashcommandnotfound.cn ~]$ if read -t 10 -sp "Enter secret passcode within 10 seconds: " secret; then
echo -e "\nGot it!"
else
echo -e "\nYou took too long!"
fi
# 输出提示,并设置10秒的输入超时时间
这个实例中,我们设置了10秒的超时时间。用户如果在10秒内输入,则显示"Got it!“,否则显示"You took too long!”。
有时候我们希望一次读取多个值并将它们放入数组中,可以使用-a
选项来实现这个需求。
[linux@bashcommandnotfound.cn ~]$ read -a array
# 请求输入
[linux@bashcommandnotfound.cn ~]$ echo ${array[0]} ${array[1]} ${array[2]}
# 输出输入的内容
这个例子中,read
命令将所有输入的单词存储在一个数组中,然后我们可以通过索引号分别来访问它们。