shift:用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理
shift(shift 1)命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。同理,shift n后,前n位参数都会被销毁,如:输入5个参数(a b c d e),那么$1=a,$2=b,$3=c,$4=d,$5=e,执行shift 3操作后,前3个参数a、b、c被销毁,就剩下了2个参数:d,e(这时d=$1,e=$2,其中d由$4 -> $1,e由$5 -> $2),参考示例如下:

until [ $# -eq 0 ]
do
   echo "第一个参数为:$1 参数个数为:$#"
   shift
done

执行以上程序: ./test.sh a b c d e
# 结果如下:
第一个参数为: a 参数个数为: 5
第一个参数为: b 参数个数为: 4
第一个参数为: c 参数个数为: 3
第一个参数为: d 参数个数为: 2
第一个参数为: e 参数个数为: 1

更多推荐

Shell脚本之shift用法