Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2045058
  • 博文数量: 519
  • 博客积分: 10070
  • 博客等级: 上将
  • 技术积分: 3985
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-29 14:05
个人简介

只问耕耘

文章分类

全部博文(519)

文章存档

2016年(1)

2013年(5)

2011年(46)

2010年(220)

2009年(51)

2008年(39)

2007年(141)

2006年(16)

我的朋友

分类:

2008-11-03 15:08:55

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 << EOF

     Warning: All jobs in the printer queue will be removed.

     Please turn off the printer now. Press return when you

     are ready to continue. Otherwise press Control C.

    EOF

3   read JUNK     # Wait until the user turns off the printer

    echo

4   /etc/rc.d/init.d/lpd stop      # Stop the printer

5   echo -e "\nPlease turn the printer on now."

6   echo "Press Enter to continue"

7   read JUNK                # Stall until the user turns the printer back on

    echo                      # A blank line is printed

8   /etc/rc.d/init.d/lpd start     # Start the printer

说明

1. 检查用户是否为root。如不是,则发送错误信息并退出。

2. 创建here文档。在屏幕上显示警告信息。

3. read命令等待用户输入。当用户按下回车键时,变量JUNK接收用户之前键入的内容。这个变量没什么实际用处。此处的read用来等待用户关闭打印机,然后回来按下回车键。

4. lpd命令终止打印机后台进程。

5. 现在重新打开打印机。

6. 如果已准备好,请求用户按下回车键。

7. 用户键入的任何内容都被读入变量JUNK,用户按下回车键之后,程序恢复运行。

8. lpd程序启动打印机后台进程。

阅读(9784) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~