linux 内建命令(二) shift命令

shift 命令时bash的内建命令.

命令的使用:

     对于某个命令行参数,其参数个数可以不固定,但是可以通过$*或$@进行循环操作。(注释:$@,$* 表示所有参数的列表.$#表示参数的个数.)

若用户要求Shell在不知道变量个数的情况下,还能逐个处理参数,也就是在$1之后是$2,$2之后是$3。在未运行shift命令之前$1是可用的,当使用shift命令之后,原来的$2会变成$1,并且原有的$1变得不可用,通过$#命令获得的参数个数也会少1。我的理解是可以将所有的参数看成是在一个数组中,最开始的指针指向第一个参数,调用shift,相当于调用循环数组的next函数,将指针指向下一个元素,那么当前元素就是第二个元素.

shift [n]这里是可以带参数的.

官方文档是这样的:位置参数从n+1 被命名为为$1,参赛在$#-n+1的以下的都被unset(释放了.)其中 n必须是非负数.并且小于等于$#.

如果n=0,没有参数被改变.如果n没有指定,默认是1.如果n>$#,位置参数也不会被改变.

如果n>$# || n < 0 返回值大于0.

这里的官方文档通过数学的语言来描述,其实和上面的类似.

下面我们还是用例子来说明比较有说服力.

#!/bin/sh
echo "all parameters count:"$#
echo "all parameters"
echo $@
until [ $# -eq 0 ]
do
    echo "the first parameter is :$1 and parameters count :$#"
    shift 1
done

这里的输入命令./shift.sh 2 3 4 6

all parameters count:4

all parameters

2 3 4 6

the first parameter is :2 and parameters count :4

the first parameter is :3 and parameters count :3

the first parameter is :4 and parameters count :2

the first parameter is :6 and parameters count :1

我们知道,$1-$9能够代表9个参数.$0代表文件名本身.

这里可以解决一个问题,如果是参数多余9个呢.shift 就能帮上大忙了.


另外的一个例子:

#!/bin/sh

function usage(){

  echo "usage:`basename $0` [-l|-u] file..." >&2

  exit 1

}

if [ $# -eq 0 ];then

     usage

fi

while [ $# -ne 0 ]

do 

    case $1 in

        -l|-L)  echo "-l or -L is specified"

          ;;

        -u|-U) echo "-u or -U is specified"

          ;;

        *)    usage

          ;;

       esac

done


这里的结果大家应该猜测得到了.就不贴出来了. 




                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值