zoukankan      html  css  js  c++  java
  • Shell 读取用户输入

    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开始。

  • 相关阅读:
    C++-蓝桥杯-大臣的旅费[dfs][树的直径]
    C++-蓝桥杯-剪格子-[2013真题][爆搜?]
    微信公众平台运营指导
    ALGO-84 大小写转换
    ALGO-84 矩阵乘法
    ALGO-49 寻找数组中最大值
    ALGO-92 前缀表达式
    ALO-42 送分啦
    ALGO-90 出现次数最多的整数
    【微信】公众号群发相关使用
  • 原文地址:https://www.cnblogs.com/liuchuanfeng/p/6888954.html
Copyright © 2011-2022 走看看