天天看点

Linux Command Line and Shell Scripting Bible__第11章

Linux Command Line and Shell Scripting Bible__第11章

第11章  处理用户输入

向shell脚本传递数据的最基本方式是使用:命令行参数。

位置参数:$0为程序名称,$1为第一个参数,$2为第二个参数,……直到$9为第9个参数。第9个变量之后,必须使用大括号将变量括起来,如${10}。

读取程序名称:传递给变量$0的字符实际上是程序的完整路径,可通过basename命令只返回程序名称。

# !/bin/bash

# using basename with the $0 parameter

name = `basename $0`

echo The command entered is : $name

返回程序的名称。

特殊变量  $#  中存储执行脚本时包含的命令行参数的个数。

    虽然  $#  能返回参数个数,但  ${$#}  却不能得到最后一个命令行参数值。因为在大括号中不能使用美元符号,必须将美元符号替换为感叹号,即  ${!#}

$*    [email protected]    这两个变量都是在一个变量中包含所有命令行参数。

    $* 将所有参数视为一个单词

    [email protected] 分别对待每个参数

test

# !/bin/bash

# testing $* and [email protected]

count = 1

for param in " $* "

do

echo " \$* Parameter $count = $param

done

count = 1

for param in " [email protected] "

do

echo " \[email protected] Parameter $count = $param "

done

py - [email protected] - stage: ~/ work / Shell_prog$ . / test12 1 a 3 d

$ * Parameter 1 = 1 a 3 d

[email protected] Parameter 1 = 1

[email protected] Parameter 2 = a

[email protected] Parameter 3 = 3

[email protected] Parameter 4 = d

shift命令帮助操作命令行参数,能够改变命令行参数的相对位置。

默认将每个参数变量左移一个位置。变量$3的值移给变量$2,变量$2的值移给$1,而变量$1的值则被丢弃(变量$0的值和程序名称保持不变)。

处理选项:选项是由破折号引导的单个字母,它更心命令的行为。

代码

# !/bin/bash

# extracting options and parameters

while [ - n " $1 " ]

do

case " $1 " in

- a) echo " Found -a options. " ;;

- b) echo " Found -b options. " ;;

- c) echo " Found -c options. " ;;

* ) echo " $1 is not an option. "

esac

shift

done

# ./test -a -b -c -d

Found - a option.

Found - b option.

Found - c option.

- d is not an option.

#

执行shell脚本时经常会遇到需要使用选项又需要使用参数的情况,在linux中的标准方式是通过特殊字符码将二者分开,这个特殊字符码是双破折号(--)。shell使用双破折号指示列表的结束。

代码

# !/bin/bash

# extracting command line options and values

while [ - n " $1 " ]

do

case " $1 " in

- a) echo " Found -a option. "

- b) param = $ 1

echo " Found -b option, with parameter valus $param. "

- c) echo " Found -c option. "

-- ) shift

break

* ) echo " $1 is not an option. "

esac

shift

done

count = 1

for param in " $1 "

do

echo " Parameter #$count: $param. "

count = $[ $count + 1 ]

done

代码

# !/bin/bash

# extracting command line options and values with getopt

set -- `getopt - q ab:c " [email protected] " `

while [ - n " $1 " ]

do

case " $1 " in

- a) echo " Found the -a option. " ;;

- b) param = $ 2

echo " Found the -b option, with parameter value $param. "

shift 2 ;;

- c) echo " Found the -c option. " ;;

-- ) shift

break ;;

* ) echo " $1 is not an option. "

esac

shift

done

count = 1

for param in " [email protected] "

do

echo " Parameter #$1: $param "

count = $[ $count + 1 ]

done

----------------

获取用户输入

read命令接受标准输入(键盘)的输入,或其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。

-n  该选项抑制字符串结尾的新行符,允许用户在字符串后面立即输入数据,而不是在下一行中输入

-p  允许在read命令行中直接指定一个提示

在read命令行中也可不指定变量,如果不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中。

-t  指定一个计时器,指定read命令等待输入的秒数。

-n1  提示read命令中要接收到一个字符就退出。

默读

-s  能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成了与背景相同的颜色)

读取文件

每调用一次read命令,都会读取文件中的一行文本。

转载于:https://www.cnblogs.com/way_testlife/archive/2010/09/16/1827482.html

继续阅读