当前位置: 首页 > 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 不再存在(被丢弃)

http://www.dtcms.com/a/24741.html

相关文章:

  • 五十天精通硬件设计第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论文实现之结合对抗、均方、感知三种损失以及对称卷积神经网络来实现超分辨率重建
  • BS5852英国家具防火安全条款主要包括哪几个方面呢?
  • deepseek-v3在阿里云和腾讯云的使用中的差异
  • hystrix超详细教学
  • Python常见面试题的详解11
  • AI 量化炒股:噱头还是未来?从技术发展与投资实践深度分析
  • 最长回文子串(蓝桥云课)
  • T5 大模型
  • 进制和编码
  • 前端(AJAX)学习笔记(CLASS 2):图书管理案例以及图片上传
  • vcf2phylip v2.8-生信工具46