当前位置: 首页 > news >正文

bash脚本----传参的处理

Linux脚本:Bash脚本看这一篇就够了-CSDN博客

脚本传参:

./my_script.sh  arg1  arg2 arg3

使用以下几个变量进行处理:

$0   #即命令本身(my_script.sh),相当于c/c++中的argv[0];
$1   #第一个参数(arg1),$2, $3, $4 ...   #第2、3、4个参数,依次类推;
$#   #参数的个数,不包括命令本身,上述例子$# = 3;
$@   #参数本身的列表,不包括命令本身;
$*   #和$@相同,但"$*"和"$@"(加引号)并不同,
     #"$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组

(1)脚本传参的个数:

  • "$#" 用于表示传递给脚本的**位置参数(positional arguments)**的数量

        位置参数是指在命令行中直接跟随脚本名称的参数。仅计算位置参数,不包括脚本名称本身。例如,./script.sh 中的 script.sh 不算作参数。

if [ "$#" -lt 4 ]; then
    xxx
else
    xxx
fi

(2)长选项、短选项

$ command  [option]  [paraments]     

对于选项(option)类型有两种:

1)短选项(short option):由一个连字符和一个字母构成,例如:-a, -s等;
2)长选项(long options):由两个连字符和一些大小写字母组合的单词构成,例如:--size,--help等。

短选项:-n  -m 也算是参数。

./arg_info.sh -n 1 -m 2

arg1 -n
arg2 1
arg3 -m
arg4 2
arg_num =4

(3)改变参数索引:shift

在 Bash 脚本中,shift 是一个内置命令,用于操作脚本的位置参数($1$2$3 等)。它的主要功能是将位置参数向左移动(即“移位”),从而改变参数的索引位置。这在处理命令行参数时非常有用,尤其是在循环中逐个处理参数时。

  • 每次执行 shift 命令时,位置参数 $1 会被丢弃,其他参数的索引会依次向前移动。

  • ./my_script.sh   -n 1  -m 2  -s 3 
    
     while [ -n "$1" ]   #检查参数1是否为空
      do
        case "$1" in  #根据当前参数1的值匹配不同的选项,并执行相应的逻辑
    
          -n) 
              xxx
              shift;;    
          -m)
              xxx
              shift;;
           *) 
              xxx
        
         esac
         shift
        done
                

  • ./script.sh a b c d

    在脚本中,位置参数的初始状态如下:

  • $1 = a

  • $2 = b

  • $3 = c

  • $4 = d

  • shift

    执行shift指令后,参数的索引会向前移动一位:

  • $1 = b

  • $2 = c

  • $3 = d

  • $4 不再存在(被丢弃)

  • 再次执行shift指令后,

  • $1 = c

  • $2 = d

  • $3 不再存在(被丢弃)

相关文章:

  • 五十天精通硬件设计第34天-CMOS 和 JFET 放大器中电流噪声的影响
  • 聊一聊Netty中的执行器选择策略
  • 实践深度学习:构建一个简单的图像分类器
  • K8s:kubernetes.io~csi 目录介绍
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue非遗传承与保护研究系统【提供源码+答辩PPT+文档+项目部署】
  • 版本控制与Git实战指南:从入门到WebStorm集成
  • 暴雨受邀参加“DeepSeek影响与启示”特别论坛
  • buuctf刷题记录
  • win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统
  • React 前端框架介绍
  • 国内加大政策推动,多层级标准建立产业规范
  • 外盘期货数据分析新视角:分钟级高频数据解析
  • Onedrive精神分裂怎么办(有变更却不同步)
  • 什么是知识文库?知识存储与管理的利器
  • 【和春笋一起学C++】if else语句
  • Linux运维篇-存储基础知识
  • Maven的依赖管理
  • 【Java】泛型与集合篇(一)
  • 《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用
  • Pytorch论文实现之结合对抗、均方、感知三种损失以及对称卷积神经网络来实现超分辨率重建
  • 特朗普要征电影关税惊扰全球电影业,“让好莱坞再次伟大”或现反效果
  • “子宫肌瘤男性病例”论文后:“宫颈癌、高危产妇”论文也现男性病例,作者称“打错了”
  • 山大齐鲁医院回应论文现“男性确诊子宫肌瘤”:给予该护士记过处分、降级处理
  • 我的诗歌阅读史
  • 徐丹任武汉大学药学院院长:研究领域在国际上处领跑地位
  • 17家A股城商行一季报扫描:青岛银行营收增速领跑,杭州银行净利增速领跑