可以使用 read 命令来读取用户输入的内容、密码以及文件内容,并存入变量以备使用。
用法
- read 命令的格式:
1 | read [-options] [variable...] |
例如:
1 | read -p "input username:" user |
- read 后如果不指定接收的变量名称,则将值赋给 REPLY 变量:
1 | read |
- read 可以同时指定多个变量,默认情况下,用户可以使用空格分隔多个变量的值,read 指定的最后一个变量接收剩下的所有值:
1 | read a b c |
- 可以使用 read 命令读取文件,每次读取一行:
1 | while read oneline |
read 的参数
- -t : 读取输入时设置超时秒数,也可以使用环境变量 TMOUT 来指定超时秒数
- -p :指定输入的提示信息
- -n :指定只读取若干个字符:
1 | read -n 1 a |
- -e :允许使用 readline 库提供的快捷键,例如自动补全,在输入路径时很有用:
1 | read -e filename |
- -s :用户输入不显示出来,适合输入密码
其他不太常用的参数:
- -a :将用户的输入保存为一个数组:
1 | read -a names |
-d (delimiter) :指定输入结束符,默认时换行结束
-r :raw 模式,不会转义输入的反斜杠转义字符
-u fd :使用文件描述符 fd 作为输入
Shell 启动时有三个标准的文件描述符:
- stdin 0 号描述符,代表输入设备,进程从中读取数据
- stdout 1 号描述符,进程往其中写入数据
- stderr 2 号描述符,进程往其中写入错误信息
IFS 变量
IFS,Internal Field Separator,内部字段分隔符,默认值为空格、Tab、换行符。
使用该变量可以为 read 指定读取分隔符:
1 | IFS=":" read user pw uid gid name home shell <<< $(cat /etc/passwd | grep root) |