原文:https://blog.csdn.net/zhu_xun/article/details/24796235

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

示例1:依次读取输入的参数并打印参数个数:
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

从上可知 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:

#!/bin/bash
echo "参数个数为:$#,其中:"
for i in $(seq 1 $#)
do
  eval j=\$$i
  echo "第$i个参数($"$i"):$j"
done
 
shift 3
 
echo "执行shift 3操作后:"
echo "参数个数为:$#,其中:"
for i in $(seq 1 $#)
do
  #通过eval把i变量的值($i)作为变量j的名字
  eval j=\$$i
  echo "第$i个参数($"$i"):$j"
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

Linux shell脚本中shift的用法说明相关推荐

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

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

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

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

  3. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  4. Linux Shell脚本中压缩包解压到目标目录下

    在Linux Shell脚本中,把一个压缩文件解压到目标目录下,使用如下代码: tar -xvf server.tar -C /opt/ 上述命令实现了把当前目录下的server.tar的压缩包,解压 ...

  5. Linux Shell - 脚本中自动确认需要输入确认的命令

    文章目录 Linux Shell - 脚本中自动确认需要输入确认的命令 1.yum 命令 2.其它命令 Linux Shell - 脚本中自动确认需要输入确认的命令 1.yum 命令 通过指定 -y ...

  6. linux脚本用户输入,如何在Linux shell脚本中提示用户输入

    本篇文章给大家介绍关于如何在Linux shell脚本中提示用户输入?下面来看具体的内容. 我们首先来看一下命令# read var # read -s "Waiting for input ...

  7. Linux shell脚本中的命令正确写法

    shell脚本中的命令需加反引号``

  8. Linux shell脚本中分号的作用

    日常工作中有时候会需要用到shell脚本来简化重复性工作. 然后每次都迷惑在什么地方改用分号,什么地方不用.好吧今天,来个了断吧. 首先我的需求是,判断有没有指定目录,如果没有则git clone 一 ...

  9. linux shell alias,Linux shell脚本中使用alias定义的别名

    核心知识点 shopt 开启和关闭 alias 扩展 交付模式默认是开启的,脚本的默认是关闭的 alais 扩展的名称是 expand_aliases alias 定义 在当前session中,可以直 ...

最新文章

  1. MySQL中的子查询
  2. TensorFlow 2——替换【tensorflow.compat.v1.contrib.rnn.LSTMCell】解决方案
  3. 蓝桥杯 入门训练 试题集汇总 【A+B问题、序列求和、圆的面积、Fibonacci数列】
  4. 怎样快速画出一个正方体_小学数学非常有效的“画图”解题法,快速解题的“金钥匙”...
  5. Extjs中三种不同的数据提交方式
  6. java 鼠标拖动画矩形_java怎么实现鼠标在桌面拖动过程中 画 矩形的 功能?
  7. 云原生数据中台的 What、Why、Who、How和Where
  8. Guitar Pro如何更改五线谱的符杆方向
  9. Struts框架的工作原理
  10. matlab logistic拟合,用matlab拟合Logistic,4参数logistic
  11. 20款优秀的数据可视化工具 (建议收藏)
  12. Flex 加载Base64编码的二进制字符串图片
  13. 利用Google Drive將英文版的PDF翻译成中文版的PDF
  14. 自动刷乐乎邀请码脚本
  15. colab读取Google Drive
  16. 百度地图Web API Python模块
  17. 华为mate40pro有没有鸿蒙,mate40pro不能升级鸿蒙吗?我啥也不懂,完蛋了
  18. 云服务器怎么换ip云服务器,云服务器换ip难不难?云服务器换IP的步骤
  19. 将设备插入usb2.0端口_将鼠标插入USB 3.0端口有什么好处?
  20. swfobject.js for flash 的使用(for swfobject 2.0)

热门文章

  1. python程序代码_python基础二
  2. 基于Java+SpringBoot+vue+elementui的校园文具商城系统详细设计和实现
  3. 《springcloud超级入门》Spring Cloud开发环境的准备和Lombok安装步骤《四》
  4. python编程 迷你世界_迷你编程下载-迷你世界迷你编程下载 v1.0官方版--pc6下载站...
  5. 2017年网络统考计算机成绩,2017年12月江苏省成人计算机基础统考成绩查询
  6. 乘法口诀表编程php视频,PHP学习之制作乘法口诀表
  7. Python安装与环境变量的配置
  8. Spring Boot JDBC
  9. c语言备忘录算法矩阵链乘,矩阵链乘法(备忘录法)
  10. python的字符编码叙述_Python: 熟悉又陌生的字符编码