shift命令 – 移动位置参数

shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)。

对于某个命令行参数,其参数个数可以不固定,但是可以通过$*或$@进行循环操作。若用户要求Shell在不知道变量个数的情况下,还能逐个处理参数,也就是在$1之后是$2,$2之后是$3。在未运行shift命令之前$1是可用的,当使用shift命令之后,原来的$2会变成$1,并且原有的$1变得不可用,通过$#命令获得的参数个数也会少1。

语法格式:shift [参数]

常用参数:

n 整数

参考实例

依次读取输入的参数并打印参数个数:

run.sh 内容如下:

#!/bin/bash
while [ $# != 0 ];do
echo "第一个参数为:$1,参数个数为:$#"
shift
done
输入如下命令运行:run.sh a b c d e f
结果显示如下:第一个参数为:a,参数个数为:6
第一个参数为:b,参数个数为:5
第一个参数为:c,参数个数为:4
第一个参数为:d,参数个数为:3
第一个参数为:e,参数个数为:2
第一个参数为:f,参数个数为:1 

把参数进行左移3个:

#!/bin/bash
echo -e "./t.sh arg1 arg2 arg3 arg4 arg5 arg6"
str1="${1},${2},${3}"
echo "str1=$str1"
shift 3
str2=$@
echo "str2=$str2"
sh t.sh 1 2 3 4 5 6 7
str1=1,2,3

将参数从左到右逐个移动:

[root@xtuos.com ~]# cat shift.sh
#!/bin/bash
while [ $# -ne 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
shift
done
[root@xtuos.com ~]# sh shift.sh Lily Lucy Jake Mike
第一个参数为: Lily 参数个数为: 4
第一个参数为: Lucy 参数个数为: 3
第一个参数为: Jake 参数个数为: 2
第一个参数为: Mike 参数个数为: 1

原创文章,作者:云东方,如若转载,请注明出处:https://www.yundongfang.com/1456.html

(0)
上一篇 2021年3月18日 下午4:25
下一篇 2021年3月18日 下午4:31

相关推荐

  • lpr命令 – 将文件放入打印队列等待打印

    lpr命令用于将文件发送给指定打印机进行打印,如果不指定目标打印机,则使用默认打印机。 语法格式:lpr [参数] 常用参数: -E 与打印服务器连接时强制使用加密 -H 指定可选…

    Linux命令 2021年3月19日
  • dip命令 – 用于IP拨号连接

    dip命令是一种linux网络通讯命令,可以用于IP拨号连接。dip命令可以控制调制解调器,以拨号IP的方式建立对外的双向连接。 语法格式: dip [参数] 常用参数: -a 询…

    Linux命令 2021年3月19日
  • edquota命令 – 编辑用户或群组的磁盘配额

    edquota预设会使用vi来编辑使用者或群组的磁盘配额设置 语法格式:edquota [参数] [用户或群组名称…] 常用参数: -u 设置用户的磁盘配额,这是预设的参 -g  …

    Linux命令 2021年3月19日
  • printf 命令 – shell 输出

    printf 命令模仿 C 程序库(library)里的 printf() 程序。 printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定…

    Linux命令 2021年3月18日
  • eject命令 – 退出抽取式设备

    eject命令用于退出抽取式设备。若设备已挂入,则eject会先将该设备卸除再退出。 语法格式: eject [参数] [设备] 常用参数: -a 控制设备的自动退出功能 -c 选…

    Linux命令 2021年3月19日
  • lessecho命令 – 展开元字符

    lessecho是一个简单地在标准输出上重复其参数的程序,但是任何包含空格的参数都要用引号括起来。 语法格式:lessecho [参数] 常用参数: -ox 指定“x”作为左引号字…

    Linux命令 2021年3月18日
  • gdisk命令 – 交互式GPT操纵器

    gdisk 是一个命令界面的用于创建和操作分区表的工具。 它会自动将MBR分区表转换为较新的GPT分区表格式,或者加载GUID分区表。 与-l命令行选项一起使用时,程序将显示当前分…

    Linux命令 2021年3月19日
  • ypdomainname命令 – 显示主机的NIS的域名

    ypdomainname命令的作用是显示由函数“getdomainname”返回的主机域名,使用这个命令也可以设置一个主机NIS域名。 语法格式:  ypdomainname [参…

    Linux命令 2021年3月19日
  • smbpasswd命令 – 修改用户SMB密码

    smbpasswd命令属于samba套件,用户添加及删除samba用户和为用户修改密码。 因为samba用户是基于Linux的系统用户的,所以在添加samba用户前需要先创建Lin…

    Linux命令 2021年3月19日
  • vgextend命令 – 扩展卷组

    vgextend命令用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量。LVM卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以使用vgextend命…

    Linux命令 2021年3月19日