首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux Shell 读取从键盘输入的数据

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

read 命令的用法为:

read [-options] [variables]

options : 表示选项,如下表所示;

variables: 表示用来存储数据的变量,可以有一个,也可以有多个。

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

【例1】使用 read 命令给多个变量赋值。

#!/bin/bash

read -p "Enter info with space : > " name title age

echo "名字:$name"

echo "头衔:$title"

echo "年龄:$age"

运行结果:

Enter info with space : > 张三 研发VP 32

名字:张三

头衔:研发VP

年龄:32

注意,必须在一行内输入所有的值,不能换行,且使用空格分开,否则只能给第一个变量赋值,后续变量都会赋值失败。

本例还使用了-p选项,该选项会用一段文本来提示用户输入。

【例2】只读取一个字符。

#!/bin/bash

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

printf "\n" #换行

echo $char

运行结果:

Enter a char > A

A

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

printf "\n"语句用来达到换行的效果,否则 echo 的输出结果会和用户输入的内容位于同一行,不容易区分。

【例3】在指定时间内输入密码。

#!/bin/bash

if

read -t 30 -sp "Enter password in 30 seconds(once) > " pwd && printf "\n" && #第一次输入密码

read -t 30 -sp "Enter password in 30 seconds(again)> " pwd2 && printf "\n" && #第二次输入密码

[ $pwd == $pwd2 ] #判断两次输入的密码是否相等

then

echo "Valid password"

else

echo "Invalid password"

fi

这段代码中,我们使用&&组合了多个命令,这些命令会依次执行,并且从整体上作为 if 语句的判断条件,只要其中一个命令执行失败(退出状态为非 0 值),整个判断条件就失败了,后续的命令也就没有必要执行了。

如果两次输入密码相同,运行结果为:

Enter password in 30 seconds(once) >

Enter password in 30 seconds(again)>

Valid password

如果两次输入密码不同,运行结果为:

Enter password in 30 seconds(once) >

Enter password in 30 seconds(again)>

Invalid password

如果第一次输入超时,运行结果为:

Enter password in 30 seconds(once) > Invalid password

如果第二次输入超时,运行结果为:

Enter password in 30 seconds(once) >

Enter password in 30 seconds(again)> Invalid password

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190417A0KBJ000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券