位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1$2$3丢弃,$0不移动。不带参数的shift命令相当于shift 1

非常有用的 Unix 命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。

示例如下:

#测试 shift 命令(x_shift.sh)
until [ $# -eq 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
shift
done
执行以上程序x_shift.sh:
$./x_shift.sh 1 2 3 4

结果显示如下:

第一个参数为: 1 参数个数为: 4
第一个参数为: 2 参数个数为: 3
第一个参数为: 3 参数个数为: 2
第一个参数为: 4 参数个数为: 1

从上可知 shift 命令每执行一次,变量的个数($#)减一,而变量值提前一位,下面代码用 until 和 shift 命令计算所有命令行参数的和。

#shift 上档命令的应用(x_shift2.sh)
if [ $# -eq 0 ]
then
echo "Usage:x_shift2.sh 参数"
exit 1
fi
sum=0
until [ $# -eq 0 ]
do
sum=`expr $sum + $1`
shift
done
echo "sum is: $sum"

执行上述程序:

$x_shift2.sh 10 20 15

其显示结果为:

45

  Shift 命令还有另外一个重要用途, Bsh 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。

  Shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。

转载于:https://blog.51cto.com/silian20122/1784261

Shell编程中Shift的用法相关推荐

  1. Shell编程中Shift的用法(转)

    位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shift命令相当于shift 1. 非常 ...

  2. shell shift与{}_一文掌握shell脚本中shift的用法及功能

    概述 今天主要介绍下shell脚本中shift的一些用法,这个命令还是相对比较少见的. 一.shift介绍 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数 ...

  3. Linux中shift命令的用法,一文掌握shell脚本中shift的用法及功能

    概述 今天主要介绍下shell脚本中shift的一些用法,这个命令还是相对比较少见的. 一.shift介绍 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数 ...

  4. Linux shell脚本中shift的用法说明

    原文:https://blog.csdn.net/zhu_xun/article/details/24796235 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历 ...

  5. shell编程中expr的用法

    http://blogold.chinaunix.net/u2/80710/showart_1933974.html 在网上找了好长时间,才找到这么篇好文章,给大家分享一下. expr 命令 用途 求 ...

  6. shell编程中的select用法

    select 语句 select表达式是bash的一种扩展应用,擅长于交互式场合.用户可以从一组不同的值中进行选择: select var in ... ; dobreak; done .... no ...

  7. shell编程中if []的用法注意

    2019独角兽企业重金招聘Python工程师标准>>> 1.if后要有空格 2.[] 中括号的开头和结尾要有空格! 3. [ $1-eq"root" ]中括号中的 ...

  8. 掌握shell编程中数组的常见用法及示例

    From: http://www.embeddedlinux.org.cn/html/jishuzixun/201211/19-2386.html 给大家分享下数组的用法小例子,希望能给大家一点帮助. ...

  9. 轻松掌握shell编程中数组的常见用法及示例

    缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...

最新文章

  1. 注册表----修改Win7登录界面
  2. java的异常抛出throws和throw的简单使用
  3. kafka springboot配置_springboot 将日志导入kafka配置文件 logbackspring.xml(多环境)
  4. arch Linux 添加引导,ArchLinux 添加开机启动脚本, 亲测
  5. ps -ef grep java解释,ps -ef | grep java(示例代码)
  6. img 隐藏_仙女山美食美景色,那些隐藏在深处角色味香
  7. NTP原理及配置使用
  8. Andorid连接USB打印机
  9. html导航折叠与展开,html展开收起
  10. Flutter 修改自带Switch,实现轻量自定义Switch,使用screen_utils适配大屏
  11. 《菜鸟教程》丨2D骨骼动画工具DragonBones的使用教程
  12. 百度地图如何在html中显示图片,在网页中插入百度地图(实例)
  13. SDUST 第四次实验
  14. c语言编程TLC2543AD采集,TLC2543单片机程序 带Proteus仿真 电路原理图 AD转换实验
  15. 前端安全之XSS攻击详解
  16. 同步通讯和异步通讯的区别
  17. 【Aegisub相关】Lua程序设计 第4版(中文翻译)
  18. 苹果5壁纸_元气壁纸软件-元气壁纸安卓版下载v1.0.2
  19. vb中MSHFlexgrid控件小总结
  20. 用Python编写第一个小游戏

热门文章

  1. s:select 使用
  2. 配置EXCHANGE服务器
  3. T4 (Text Template Transformation Toolkit)实现简单实体代码生成
  4. leetcode 122 买卖股票的最佳时机II
  5. 【干货】JDK动态代理的实现原理以及如何手写一个JDK动态代理
  6. 同一Linux下起两台Mysql Server
  7. 微信样式组件遇到的小坑
  8. Yii2 使用 Beanstalk 队列系统
  9. ant导入Zookeeper到Eclipse错误path contains invalid character
  10. [转]JavaScript代码收集