shell读取键盘输入

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代码是不好的做法。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值