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

devtools/2025/2/21 5:19:55/

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 ]; thenxxx
elsexxx
fi

(2)长选项、短选项

$ command  [option]  [paraments]     

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

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

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

./arg_info.sh -n 1 -m 2arg1 -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是否为空docase "$1" in  #根据当前参数1的值匹配不同的选项,并执行相应的逻辑-n) xxxshift;;    -m)xxxshift;;*) xxxesacshiftdone

  • ./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.ppmy.cn/devtools/160110.html

相关文章

第一章——1.2 Java“白皮书”的关键术语

《Java 核心技术卷I》第一章的1.2节介绍了Java“白皮书”中的关键术语,这些术语是Java设计初衷和核心特性的总结。以下是这些关键术语的详细解释和总结: 1.2 Java“白皮书”的关键术语 简单性(Simple): Java设计目标是…

openGauss 3.0 数据库在线实训课程19:学习用户和角色管理

前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 掌握openGauss的用户和角色管理。 课程作业 1、创建test10_tbs的表空间,在这个表空间中创建数据库testdb10 使用create user创…

人工智能对抗生成网络之基于CycleGan图像合成源码解读

先外网下载与安装visdom,配置好visdom可视化工具,然后训练时才不报错。 (1)CycleGan网络所需数据 CycleGan例如可以把马变成斑马,把某个名星图像变成另外一个人的图像。 CycleGan只需二个数据集,不需一一对应关系,不需配对的数据集,让网络自己去学习与配对。例如…

Effective Objective-C 2.0 读书笔记——大中枢派发

Effective Objective-C 2.0 读书笔记——大中枢派发 多用派发队列,少用同步锁 说到同步锁,我们不难想起我们前面在学习线程之中的内容时学习到的关键字synchronized,使用这个同步块可以让我们这段程序实现加锁的操作,即在不同线…

MySQL数据库(3)—— 表操作

目录 一,创建表 1.1 创建表的SQL 1.2 演示 二,查看表 三,修改表 四,删除表 常用的表操作会涉及到两种SWL语句 DDL(Data Definition Language)数据定义语言:建表、改表、删表等&#xff0…

机器学习_14 随机森林知识点总结

随机森林(Random Forest)是一种强大的集成学习算法,广泛应用于分类和回归任务。它通过构建多棵决策树并综合它们的预测结果,显著提高了模型的稳定性和准确性。今天,我们就来深入探讨随机森林的原理、实现和应用。 一、…

数据分析--数据清洗

一、数据清洗的重要性:数据质量决定分析成败 1.1 真实案例警示 电商平台事故:2019年某电商大促期间,因价格数据未清洗导致错误标价,产生3000万元损失医疗数据分析:未清洗的异常血压值(如300mmHg&#xff…

一些网络编程的补充知识

1.INADDR_ANY 由于云服务器的IP地址是由对应的云厂商提供的,这个IP地址并不一定是真正的公网IP,这个IP地址是不能直接被绑定的,如果需要让外网访问,此时我们需要bind 0。系统当当中提供的一个INADDR_ANY,这是一个宏值…