详解Linux shell脚本中shift的用法及实验说明
概述
今天主要介绍下shell脚本中shift的一些用法,这个命令还是相对比较少见的。
一、shift介绍
shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)。
简而言之,shift命令表示参数向左偏移,后面可跟数字(数字大小在参数个数范围内)
二、实验
1、依次读取输入的参数并打印参数个数:
#!/bin/bash while [ $# != 0 ];do echo "第一个参数为:$1,参数个数为:$#" shift done

输出结果:
./run.sh a b c d e f

从上可知 shift(shift 1) 命令每执行一次,变量的个数($#)减一
(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。
同理,shift n后,前n位参数都会被销毁。
2、测试shift n
#!/bin/bash echo "参数个数为:$#,其中:" for i in $(seq 1 $#) do eval j=\$$i echo "第$i个参数($"$i"):$j" done shift 3 echo "执行shift 3操作后:" echo "参数个数为:$#,其中:" for i in $(seq 1 $#) do #通过eval把i变量的值($i)作为变量j的名字 eval j=\$$i echo "第$i个参数($"$i"):$j" done

输出结果:
./shift.sh a b c d e f
