Shell脚本中shift命令的用法
写在前面
今天因为新增了一个同名的程序(参数不同)导致shell脚本在获取进程cpu使用率的时候报错了,这个报错我首先想到的是之前在传参的时候可能没写后面的参数导致的,结果看了一眼是有加参数的,那问题就在于没获取到这个参数。脚本中参数是用$1、$2、$3这样去依次赋值的,而我传进去的参数分了3个空格,最后两个也就是程序名和程序参数其实是想着当作一个入参来被接收的,但我脚本中的那种赋值手法肯定是不会成功的😂,然后就依稀想起了之前看别人脚本里写的shift
命令,这个好像是可以处理这种情况,然后就有了这篇文章。
示例
举个🌰:
一个脚本有4个入参,分别是1 2 3 4
如果直接使用$符号来对应参数的话,分别就是$1 $2 $3 $4,这种很好理解
再举个🌰:
一个脚本有3个入参,分别是1 2 3 4(其中3 4需要看作一个参数)
这种情况下,之前直接用$加序号的就行不通了,$3只会代表3
Shift命令简析
shift
命令:参数左移,每执行一次参数序列顺次左移一个位置,参数总数$#
减1
作用:分别处理每个参数,移出去的参数不再可用
还是上面的例子,入参1 2 3 4,脚本test.sh内容如下
1 |
|
说明一下,脚本中$#
指代的是参数总个数,$@
指代的是所有参数。
执行sh test.sh 1 2 3 4
,结果如下:
由上图可知,每执行一次shift
就丢弃位于首位的参数,然后整体参数向作移动1位,原来的第二位参数变成第一位,后面的依此类推。
理解了shift
命令,那么如何解决第二例子中的问题呢。这里就需要用到shift
和$@
,用$@
来指代3 4。示例如下:
1 |
|
也可写作:
1 |
|
其中shift 2
表示参数整体向左移动两位,原处于第一和第二位的参数被丢弃,3此时作为第一位。
执行结果如下:
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 NarutoHx!