使用 shift 语句的示例
以下 shift.ksh 示例脚本包含一条 USAGE 消息,显示脚本应该使用参数运行,尽管给出的参数数量是可变的:
$ cat shift.ksh #!/bin/ksh # Script name: shift.ksh USAGE="usage:$ ./shift.ksh one two three four The arguments to the script are: one two three four The value of $* is now:arg1 arg2 ... argN" if (( $# == 0 )) then print $USAGE exit 1 fi print "The arguments to the script are:" while (($#)) do print shift done print 'The value of $* is now:'' $*
如果用户不提供参数,则打印 USAGE 消息并退出脚本;否则,进入while循环。
每次循环时,都会打印位置参数 $1 的当前值并执行 shift 语句。
shift 语句将参数的数量减一,因为它将位置参数的值向左移动一位。
($1 被赋予 $2 的值,$2 被赋予 $3 的值,依此类推,而 $1 的值被丢弃)。
打印每个参数后,(($#)) 的条件为假,while 循环终止。
语句print $* 显示在while 循环执行后没有打印任何内容,因为$# 的值为0。
使用 set 语句将位置参数的值设置为字母表中的字母,并使用语句 print $* 打印(以显示位置参数的新值)。
脚本中的最后两个语句 shift 4 和 print $* 说明了进行较大移位时会发生什么。
$ shift [ num ]
shift语句
有时,脚本不需要用户提供特定数量的参数。
用户可以根据需要为脚本提供任意数量的参数。
在这些情况下,脚本的参数通常在 while 循环中处理,条件为 (($#))。
只要参数数量大于零,此条件就为真。
在脚本 $1 和 shift 语句中处理每个参数。
因为进行移位会减少参数数量,最终,while 循环中的条件变为假并且循环终止。
注意:如果没有提供数字作为 shift 语句的参数,则假定该数字为 1.
shift 语句的语法是:
$ shift 4
所有位置参数都向左移动由 num 指示的位置数(如果省略 num,则向左移动 1)。
移位后消除最左边参数的数量。
例如,声明:
消除前四个位置参数。
第五个参数的值变为 $1 的值,第六个参数的值变为 $2 的值,依此类推。
num 大于位置参数的数量是错误的。