设为首页 收藏本站
查看: 723|回复: 0

Shell读取用户输入

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-15 15:05:01 | 显示全部楼层 |阅读模式
14.2  读取用户输入
14.2.1  变量
上一章我们谈到如何定义或取消变量,变量可被设置为当前shell的局部变量,或是环境变量。如果您的shell脚本不需要调用其他脚本,其中的变量通常设置为脚本内的局部变量(参见第13.10节“变量”)。
要获取变量的值,在美元符后跟变量名即可。shell会对双引号内的美元符后的变量执行变量扩展,单引号中的美元符则不会被执行变量扩展。
范例14-3
1   name="John Doe" or declare name="John Doe"   # local variable
2   export NAME="John Doe"    # global variable
3   echo "$name" "$NAME"      # extract the value
14.2.2  read命令
read命令是一个内置命令,用于从终端或文件读取输入(参见表14-1)。read命令读取一个输入行,直至遇到换行符。行尾的换行符在读入时将被转换成一个空字符。如果read命令后未跟变量名,读入的行将被赋给内置变量REPLY。也可以用read命令来中断程序的运行,直至用户输入一个回车键。要知道如何有效地使用read命令从文件读取输入行,请参见14.6节的“循环控制命令”。如果带-r选项,read命令将忽略反斜杠/换行符对,而把反斜杠作为行的一部分。read命令有4个控制选项:-a,-e,-p,-r②。
表14-1 read命令
格    式
含    义
read answer
从标准输入读取一行并赋值给变量answer
read first last
从标准输入读取一行,直至遇到第一个空白符或换行符。把用户键入的第一个词存到变量first中,把该行的剩余部分保存到变量last中
read
标准输入读取一行并赋值给内置变量REPLY
read –a arrayname
读入一组词,依次赋值给数组arrayname③
                                        (续表)   

格    式
含    义
read -e
在交互式shell命令行中启用编辑器。例如,如果编辑器是vi,则可以在输入行时使用vi命令③
read –p prompt
打印提示符,等待输入,并将输入赋值给REPLY变量③
read –r line
允许输入包含反斜杠③
范例14-4
(脚本)
      #!/bin/bash
      # Scriptname: nosy
      echo -e "Are you happy? \c"
  1   read answer
      echo "$answer is the right response."
      echo -e "What is your full name? \c"
  2   read first middle last
      echo "Hello  $first"
      echo –n "Where do you work? "
  3   read
  4   echo I guess $REPLY keeps you busy!
  -------------------------------------------------------④
  5   read -p "Enter your job title: "
  6   echo "I thought you might be an $REPLY."
  7   echo -n "Who are your best friends? "
  8   read -a friends
  9   echo "Say hi to ${friends[2]}."
  -------------------------------------------------------
(输出)
      $ nosy
      Are you happy? Yes
  1   Yes is the right response.
  2   What is your full name? Jon Jake Jones
      Hello Jon
  3   Where do you work? the Chico Nut Factory
  4   I guess the Chico Nut Factory keeps you busy!
  5   Enter your job title: Accountant
  6   I thought you might be an Accountant.
7,8   Who are your best friends?  Melvin Tim Ernesto
  9   Say hi to Ernesto.
说明
1. read命令接收一行用户输入,将其值赋给变量answer。
2. read命令从用户处接收输入,将输入的第一个词赋给变量first,将第二个词赋给变量middle,然后将直到行尾的所有剩余单词都赋给变量last。
3. 从标准输入读取一行,赋值给内置变量REPLY。
4. 显示变量REPLY的值。
5. 带-p选项的read命令,显示提示“Enter your job title:”,把输入行赋值给特定内置变量REPLY。
6. 在字符串中显示变量REPLY的值。
7. 请求用户输入。
8. 带-a选项的read命令将输入当作一组词组成的数组,数组名为friends,读入数组的元素是Melvin、Tim和Ernesto。
9. 显示friends数组的第3个元素。数组下标从0开始。
范例14-5
(脚本)
    #!/bin/bash
    # Scriptname: printer_check
    # Script to clear a hung-up printer
1   if [ $LOGNAME != root ]
    then
        echo "Must have root privileges to run this program"
        exit 1
    fi

2   cat

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-151645-1-1.html 上篇帖子: Windows PowerShell v2.0 CTP 下篇帖子: xshell十大技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表