shell读取键盘输入
2016-07-04 17:45
597 查看
read - 从标准输入读取数值,命令语法:
这里的options是可以跟的参数(一个或多个),且variable是用来存储输入数值的变量名(一个或多个)。如果没有提供变量名,shell系统变量REPLY会包含数据行。具体的demo如下:
输出结果截图:
在echo后面使用-n选项是为了删除输出结果末尾的换行符,让提示文字和输入文字在一行。
read也可以给多个变量赋值,赋值以空格分割。demo是让客户输入一个或多个变量。demo如下:
如果read命令接收到的变量值数目少于期望的数字,那么额外的变量值为空,而多余的输入数据则会被包含到最后一个变量中。如果read命令之后没有跟变量名,则shell系统变量REPLY将会包含所有的输入。
在read后使用参数可以完成有趣的事情。通过-p选项我们能够提供提示信息:
输出结果:
-p prompt 为输入显示提示信息,使用字符串prompt
通过-t和-s选项,我们可以编写读取“密码”输入,并且如果在特定时间内输入没有完成,就终止输入。
这个脚本提示用户输入一个密码,并等待输入10s。如果在特定的时间内没有完成输入,则脚本会退出并返回一个错误。因为包含里一个-s的选项,所以输入的密码不会出现在屏幕上。
输出内容:
一种常见的交互类型称为菜单驱动。在菜单驱动程序中,呈现给用户一系列选择,并要求用户选择一项。例如:
输出结果:
这个脚本分两部分,第一部分显示菜单和用户输入。第二部分确认用户反馈,并执行选择的行动。注意脚本中使用的exit命令。在这里,一个行动执行后,exit被用来阻止脚本执行不必要的代码。在程序中出现多个exit代码是不好的做法。
read [-options] [variable]
这里的options是可以跟的参数(一个或多个),且variable是用来存储输入数值的变量名(一个或多个)。如果没有提供变量名,shell系统变量REPLY会包含数据行。具体的demo如下:
#!/bin/bash echo -n "please enter an integer ->" read num if [[ $num =~ ^-?[0-9]+$ ]]; then echo "$num is number" else echo "num is not number" fi
输出结果截图:
在echo后面使用-n选项是为了删除输出结果末尾的换行符,让提示文字和输入文字在一行。
read也可以给多个变量赋值,赋值以空格分割。demo是让客户输入一个或多个变量。demo如下:
#!/bin/bash echo -n "Enter one or more values ->" read v1 v2 v3 v4 v5 echo "var1 = $v1" echo "var2 = $v2" echo "var3 = $v3" echo "var4 = $v4" echo "var5 = $v5"
如果read命令接收到的变量值数目少于期望的数字,那么额外的变量值为空,而多余的输入数据则会被包含到最后一个变量中。如果read命令之后没有跟变量名,则shell系统变量REPLY将会包含所有的输入。
在read后使用参数可以完成有趣的事情。通过-p选项我们能够提供提示信息:
#!/bin/bash #read-single:read multiple values into default variable read -p "Enter one or more values >" echo "REPLY = $REPLY"
输出结果:
Enter one or more values >912 REPLY = 912
-p prompt 为输入显示提示信息,使用字符串prompt
通过-t和-s选项,我们可以编写读取“密码”输入,并且如果在特定时间内输入没有完成,就终止输入。
#!/bin/bash #read-secret:input a secret pass phrase if read -t 10 -sp "Enter secret pass phrase >" secret_pass;then echo -e "\nSecret pass phrase = '$secret_pass'" else echo -e "\nInput time out" >&2 exit 1 fi
这个脚本提示用户输入一个密码,并等待输入10s。如果在特定的时间内没有完成输入,则脚本会退出并返回一个错误。因为包含里一个-s的选项,所以输入的密码不会出现在屏幕上。
输出内容:
evan@evan:~/shell_test$ ./readsecret Enter secret pass phrase > Secret pass phrase = 'shell secret pass'
一种常见的交互类型称为菜单驱动。在菜单驱动程序中,呈现给用户一系列选择,并要求用户选择一项。例如:
#!/bin/bash echo "Please Select: 1.Display System Information 2.Display Disk Space 3.Display Home Space Utilization 0.Quit" read -p "Enter selection [0-3] >" num if [[ $num =~ ^[0-3]$ ]]; then if [[ $num == 0 ]]; then echo "Program terminated" exit; fi if [[ $num == 1 ]]; then echo "Hostname :$HOSTNAME" uptime exit fi if [[ $num == 2 ]]; then df -h exit; fi if [[ $num == 3 ]]; then if [[ $(id -u) -eq 0 ]]; then echo "Home Space Utilization(All Users)" du -sh /home/* else echo "Home Space Utilization($USER)" du -sh $HOME fi fi else echo "Invalid entry." >&2 exit 1 fi
输出结果:
Please Select: 1.Display System Information 2.Display Disk Space 3.Display Home Space Utilization 0.Quit Enter selection [0-3] >1 Hostname :evan 17:36:20 up 56 min, 2 users, load average: 0.42, 0.44, 0.36
这个脚本分两部分,第一部分显示菜单和用户输入。第二部分确认用户反馈,并执行选择的行动。注意脚本中使用的exit命令。在这里,一个行动执行后,exit被用来阻止脚本执行不必要的代码。在程序中出现多个exit代码是不好的做法。
相关文章推荐
- shell 读取文件第几行 第几列的值
- SUSE-Xshell连接不到SUSE服务器
- [shell] 多进程脚本分析CVE数据库信息
- 第一个shell 日志统计
- shell脚本——lanmp安装
- 用shell & Python 封装 Hive SQL 实现类Store Procedure 功能
- dvwa --Upload and use C99.php Backdoor shell
- linux "-bash: telnet: command not found" telnet不是命令
- [iOS 自动打包]shell脚本使用-ipa_build 脚本使用
- 如何在Mac中使用Android SDK,使用adb工具避免出现-bash: adb: command not found
- Shell应用: 搜索文本的几种方法
- shell if语句
- Shell特殊字符
- shell特殊字符汇总
- shell awk转成数组
- shell实现自动登录服务器
- BRE与ERE的差异
- shell中判断
- shell脚本中的“2< " ">&2" "&>”
- 解决Bash On Ubuntu On Window安装Zsh无效问题附安装说明