用户交互指的是在命令的执行过程中需要一些数据,而这些数据来源于用户的即时键盘输入,read
命令就可以实现这个功能用户交互指的是在命令的执行过程中需要一些数据,而这些数据来源于用户的即时键盘输入,read
命令就可以实现这个功能。
read
命令的使用格式如下:
read [OPTION...] [VARNAME...]
VARNAME:变量名称
read
命令可以交互式接收键盘的输入,并且将输入的字符串按空白字符切割,将切割后的每个字符串存放在对应位置的变量中。
例 1:
[root@localhost ~]# read a b c
how are you
[root@localhost ~]# echo $a
how
[root@localhost ~]# echo $b
are
[root@localhost ~]# echo $c
you
上述操作可以看作使用 read
命令声明了 a
、b
、c
三个变量,接着接收键盘输入了 how are you
这个字符串,read
命令内部会将 how are you
这个字符串按空白字符分割为 how
、are
、you
三个变量,接着将它们按顺序依次给对应位置的变量赋值。
例 2:命令行提示 Enter a user name:
,接着要求用户输入用户名,并将这个用户名保存在 name
变量中。
[root@localhost ~]# echo -n 'Enter a user name:'; read name
Enter a user name:Bob
[root@localhost ~]# echo $name
Bob
echo
的-n
选项表示输出不换行。
上述操作借助 echo
来达到提示的目的,而对于这种操作,read
命令本身也给我们提供了提示功能的选项 -p
,使用如下:
[root@localhost ~]# read -p 'Enter a user name:'; read name
Enter a user name:
zhangsan
[root@localhost ~]# echo $name
zhangsan
可以看到 read
命令会阻塞当前 shell 进程的键盘输入,默认情况下,如果不进行输入,那么 read
命令的进程将会一直处于阻塞状态,而 read
命令也提供了一个 -t
选项来设定超时时间,即指定多久未输入将会自动终止 read
进程,例:
[root@localhost ~]# read -t 5 name
[root@localhost ~]#
-t
选项指定的超时时间单位为秒,在上述实例中则是 5 秒内如果没有完成输入操作,则 read
进程自动中断退出。
例 3 :编写一个脚本,提示用户输入一个磁盘设备路径,显示该设备的详细信息。
#!/bin/bash
#
read -p 'Enter a special file:' diskfile
[ -z $diskfile ] && echo 'Fool' && exit 1
if fdisk -l | grep "$diskfile" &> /dev/null; then
fdisk -l $diskfile
else
echo "Wrong disk special file."
exit 2
fi
bash -n
可以检测脚本的语法错误;
bash -x
可以调试执行脚本;
评论区