Linux shell脚本中shift的用法说明

shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)。
 
示例1:依次读取输入的参数并打印参数个数:
run.sh:
  1. #!/bin/bash
  2. while [ $# != 0 ];do
  3. echo "第一个参数为:$1,参数个数为:$#"
  4. shift
  5. done

输入如下命令运行:run.sh a b c d e f

结果显示如下:

第一个参数为:a,参数个数为:6
第一个参数为:b,参数个数为:5
第一个参数为:c,参数个数为:4
第一个参数为:d,参数个数为:3
第一个参数为:e,参数个数为:2
第一个参数为:f,参数个数为:1

从上可知 shift(shift 1) 命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。

同理,shift n后,前n位参数都会被销毁,比如:

输入5个参数: abcd
e

那么$1=a,$2=b,$3=c,$4=d,$5=e,执行shift 3操作后,前3个参数a、b、c被销毁,就剩下了2个参数:d,e(这时d=$1,e=$2,其中d由$4—>$1,e由$5—>$2),参考示例如下:

示例2:

  1. #!/bin/bash
  2. echo "参数个数为:$#,其中:"
  3. for i in $(seq 1 $#)
  4. do
  5. eval j=\$$i
  6. echo "第$i个参数($"$i"):$j"
  7. done
  8. shift 3
  9. echo "执行shift 3操作后:"
  10. echo "参数个数为:$#,其中:"
  11. for i in $(seq 1 $#)
  12. do
  13. #通过eval把i变量的值($i)作为变量j的名字
  14. eval j=\$$i
  15. echo "第$i个参数($"$i"):$j"
  16. done

输出结果为:

参数个数为:5,其中:
第1个参数($1):a
第2个参数($2):b
第3个参数($3):c
第4个参数($4):d
第5个参数($5):e
执行shift 3操作后:
参数个数为:2,其中:
第1个参数($1):d
第2个参数($2):e

参考:http://blog.csdn.net/zhu_xun/article/details/24796235

最新文章

  1. jstack工具查看系统线程问题
  2. 等价类划分方法的应用(jsp)
  3. 2.Java异常学习
  4. 【转】valueof()用法
  5. VC++ 如何使窗体最大化或是最小化
  6. mongo集群
  7. mybatis配置oracle的主键自增长
  8. Commons-Collections
  9. [Flask Security]当不能通过认证的时候制定跳转
  10. /dev/null &
  11. HTTP 301 跳转和302跳转的区别
  12. [to do list][PCB][questions]and[plan]
  13. 一步一步教你用c# entity framework6 连接 sqlite 实现增删改查
  14. String 类
  15. Latex:入门教程
  16. jersey+maven构建restful服务
  17. 关于Ubuntu使用笔记
  18. springmvc的controller中使用@Transactional无效
  19. 安装旧版本的Firefox
  20. win下apache的error.log和access.log文件过大

热门文章

  1. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
  2. [洛谷 P2508] 圆上的整点
  3. 记一次搭建vsftp服务器坑
  4. 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用
  5. 用mobiscroll.js的treelist实现弹出下拉效果
  6. windows 路由的配置
  7. python2和python3的区别总结
  8. 51nod算法马拉松B
  9. jenkins部署java项目到远程linux(四)
  10. SqlServer2008备份与还原(完整图示版)