『忘了再学』Shell基础 — 18、接收键盘输入的数据
我们之前讲过位置参数变量是用来向脚本中传递值的。
而我们在说明位置参数变量的时候,也说过位置参数变量的缺点,在执行脚本的时候,是没有给脚本所需要参数的提示。
这样的情况非常的不友好,可以用read
命令来解决,read
命令是用来接收键盘输入的命令,并提示相关输入说明。
read
命令格式如下:
[root@localhost ~]# read [选项] [变量名]
选项:
-p:“提示信息”:在等待read输入时,输出提示信息。
-t:秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间。
-n:字符数:read命令只接受指定的字符数,就会执行。
-s:隐藏输入的数据,适用于机密信息的输入。
变量名:
变量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY。
如果只提供了一个变量名,则整个输入行赋予该变量。
如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有字。
示例:
# 定义一个shell脚本count.sh,计算两个数的和。
[root@Lyl tmp]# vim count.sh
# 脚本内容如下:
#!/bin/bash
# read -t 30 是等待30秒,然后继续执行。
read -t 30 -p "please input a num1:" num1
read -t 30 -p "please input a num2:" num2
sum=$(( $num1 + $num2 ))
echo $sum
# 执行该脚本
[root@Lyl tmp]# chmod 755 count.sh
[root@Lyl tmp]# ./count.sh
# 执行结果如下图:
赋值流程,如下图:
综合练习:
# 定义一个shell脚本read.sh。
[root@Lyl tmp]# vim read.sh
# 脚本内容如下:
#!/bin/bash
# 例1
# 提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
read -t 30 -p "Please input your name:" name
# 查看变量“$name”中是否保存了你输入的name
echo "Name is $name"
# 例2
# 提示“请输入年龄”并等待30秒,把用户的输入保存入变量age中。
# 年龄是隐私,所以我们用“-s”选项隐藏输入。
read -s -t 30 -p "Please enter your age:" age
# 调整输出格式,换行。
echo -e "\n"
# 查看上边输入的年龄。
echo "Age is $age"
# 例3
# 提示“请选择性别”并等待30秒,把用户的输入保存入变量gender。
# 使用“-n 1”选项,表示只接收一个输入字符就会执行(都不用输入回车,自动就结束输入了。)
# 如下的提示:gender[M/F]
read -n 1 -t 30 -p "Please select your gender[M/F]:" gender
# 调整输出格式,换行。
echo -e "\n"
# 查看上边输入的性别。
echo "Sex is $gender"