shell脚本中左移参数shift的使用

5 篇文章 0 订阅
一、 shift 参数左移指令

     shift 命令用于对参数的左移,通常用于在不知道传入参数个数的情况下一次遍历每个参数然后进行相应处理。
      
      在扫描处理脚本程序的参数时,经常要用到的shift 命令,如果你的脚本需要10个或者10个以上的参数,你就要用shift 命令来访问第10个及以后的参数。

  •      作用
         每执行一次,参数序列顺序左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数,不再可用。

  •     补充位置参数:
         位置参数,从命令行传递给脚本,或者传递给函数,或者set给变量
         表示方法: $0 ,$1 , $2 , $3 ...等等  (注意:$9以后应该为$[10],$[11]....)

例如:                $1     $2    $3     $4    $5


shell 范例1: 依次读取输入的参数,并打印出参数个数

     [root@PengFay ~]# vim shift.sh

  1 #!/bin/bash
  2 while [ $# != 0 ]
  3 do
  4    echo "第一个参数为:$1,参数个数为:$#"
  5    shift
  6 done


解析: 从上面结果可以看到: 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 ,这时对就的位置变量为:  $1=d $2=e, 其中 d $4—>$1 e $5—>$2

shell 范例2

[root@PengFay ~]# vim case2.sh
  1 #!/bin/bash

  3 echo "参数个数为: $# 其中:"
  4 for i in $(seq $#)
  5 do
  6    eval j=\$$i         # evel 命令可以用来显示传递给脚本的最后一个参数,该命令适用于那些一次>    扫描无法实现其功能的变量,它对它后面跟的命令会执行两次扫描,第一次把 \ 去掉,第二次扫描时>    会把$i 的值替换掉,假如这时$i 的值为$1, 那么代表第一个位置参数,即i=a
  7    echo "第$i个参数($"$i"):$j"
  8 done
  9
10 shift 3
11 echo "执行shift 3之后:"
12 echo "参数个数为:$# 其中:"
13
14 for i in `seq $#`
15 do
16   eval j=\$$i
17   echo "第$i个参数($"$i"):$j"
18 done
   

shell 范例3 做一个加法计算器, 求出所有参数的和
       
    参数如下: 10 16 18 21 ,依次对应的位置变量为  $1  $2  $3  $4

[root@PengFay ~]# vim case3.sh
#!/bin/bash
#首先确认是否有参数
if [ $# -le 0 ]
then
  echo "没有足够的参数存在"
  exit 124
fi
sum=0
while [ $# -gt 0 ]
do
  sum=`expr $sum + $1`
  shift
done
echo $sum
[root@PengFay ~]#




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值