Shell read命令

Shell read命令教程

Shell 中,read 也是一个 内置命令,用来从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。

Shell read命令详解

语法

read [-options] [variables]

参数

参数 描述
options read 命令使用的选项
variables 用来存储数据的变量,可以有一个,也可以有多个

常用参数

选项 说明
-a array 把读取的数据赋值给数组 array,从下标 0 开始。
-d delimiter 用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。
-e 在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。
-n num 读取 num 个字符,而不是整行字符。
-p prompt 显示提示信息,提示内容为 prompt。
-r 原样读取(Raw mode),不把反斜杠字符解释为转义字符。
-s 静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。
-t seconds 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。
-u fd 使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

说明

options 和 variables 都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。

案例

read命令

我们首先,打开一个 Shell,并输入以下命令,使用 read 命令给多个变量赋值:

read -p "please input info > " name url age

运行后,终端输出如下:

54_Shell read命令.png

现在,我们使用 echo 命令,输出变量的值,具体命令如下:

echo "name = $name" echo "url = $url" echo "age = $age"

运行后,终端输出如下:

55_Shell read命令.png

我们看到,我们获取了输入的三个变量的值。

read命令读取单个字符

我们首先,打开一个 Shell,并输入以下命令,使用 read 命令只读取单个字符:

read -n 1 -p "Enter a char > " char

运行后,终端输出如下:

56_Shell read命令.png

现在,我们输入单个字符,输入后,我们不需要回车,运行后,终端输出如下:

57_Shell read命令.png

我们看到,我们输入单个字符后,立即就结束了程序。-n 1 表示只读取一个字符。运行脚本后,只要用户输入一个字符,立即读取结束,不用等待用户按下回车键。

read命令输入密码

我们首先,打开一个 Shell,并输入以下命令,使用 read 命令读取密码:

read -t 20 -sp "Enter password in 20 seconds > " pass1 && printf "\n"

运行后,终端输出如下:

58_Shell read命令.png

现在,我们等待较长时间,不输入,终端输出如下:

59_Shell read命令.png

我们看到,超过 20s 不输入,程序自动结束了,现在我们再次运行上述命令,并立即输入密码,终端输出如下:

60_Shell read命令.png

我们看到,我们输入的密码是不会回显的,现在,我们使用输出变量 pass1 的值,输入以下命令:

echo $pass1

运行后,终端输出如下:

61_Shell read命令.png

我们看到,我们输入的密码被赋值给了变量。

Shell read命令总结

在 Shell 中,read 也是一个内置命令,用来从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。