『忘了再学』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

# 执行结果如下图:

image

赋值流程,如下图:

image

综合练习:

# 定义一个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"

posted @ 2022-05-25 10:27  繁华似锦Fighting  阅读(501)  评论(0编辑  收藏  举报