之路 on it Road.com

使用 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 大于位置参数的数量是错误的。

Shell 脚本中的“shift”命令示例
日期:2020-09-17 00:12:50 来源:oir作者:oir