您的位置:首页 > 运维架构 > Shell

shell读取键盘输入

2016-07-04 17:45 597 查看
read - 从标准输入读取数值,命令语法:

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代码是不好的做法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: