shell中用含case语句来处理带参数的脚本

news/2024/4/25 7:52:45/文章来源:https://blog.csdn.net/weixin_43787492/article/details/130326169
为什么要写一个用case语句的脚本来检测参数以及对应的值,
而不是使用 echo "执行的文件名: $0, 第一个参数为:$1, 第二个参数为:$2";

1)、当一个shell脚本的参数执行顺序以及数量不确定
2)、当只输入了参数名,但没有输入对应的值
3)、该脚本不止在终端通过这一条带参数的命令输入,还通过工具(Jenkins)来设置参数值来输入

带case语句的shell脚本

  • 1、介绍脚本执行格式:
  • 2、脚本如下:
  • 3、脚本执行:
    • 3.1 执行时带全部参数
    • 3.2 执行时不带任何参数
    • 3.3 执行时只有部分参数
    • 3.4 执行时输入错误参数名
    • 3.5 执行时输入不合法参数值

1、介绍脚本执行格式:

本文中带参数的脚本的执行格式例如为

SCRIPT.sh -para1 value1 -para2 value2

当遇到-paraX 说明是参数名,后面不带-的就是前一个参数名对应的参数值

shift 命令用于对参数的左移
通常用于在不清楚传入参数个数的情况下依次遍历每个参数然后进行相应处理

2、脚本如下:

#!/bin/sh#首先给要接收的参数的值设置对应的变量来接收值
#这里先全部设置了默认值flag_0  (为什么要设置默认值,因为不设置默认值时变量值为空,同时有的参数是可以不设置参数值的)
#如下,该脚本允许最多传4组参数
name=flag_0
branch_name=flag_0
version_name=flag_0
path_name=flag_0#用于告诉用户要传入的参数的结构以及具体参数名
usage()
{echo "usage()"echo "The executed format:"echo "$0 -name xxx -branch xxx -version xxx -path xxx"exit 1
}#用于显示参数名以及对应的参数值
show_parameters()
{echo ""echo "show_parameters()"echo name=$nameecho branch_name=$branch_nameecho version_name=$version_nameecho path_name=$path_nameecho ""
}echo "Total $# parameters"#如果参数数量不为0,再对各个参数进行判断
if [ $# != 0 ]; then#当第一个参数($1)不为空, 则用case来遍历第一个参数while [ n$1 != n ]; do#如果第一个参数为 -h/-help 或 -name 或 -branch 或 -version 或 -path  则继续判断case $1 in#如果第一个参数为 -h/-help, 则调用usage-h | -help )usage;;#如果第一个参数为 -name-name )if [[ $2 == -* ]]; thenecho "No name parameter value"elsename=$2echo name=$nameshiftfi;;-branch )if [[ $2 == -* ]]; thenecho "No branch parameter value"elsebranch_name=$2if [[ $branch_name == master || $branch_name == dev || $branch_name == feature* ]]; thenecho "branch_name value is valid "elseecho branch_name must be master or dev or feature*exit 2fiecho branch_name=$branch_nameshiftfi;;-version )if [[ $2 == -* ]]; thenecho "No version parameter vlue"elseversion_name=$2if [[ "$version_name" =~ ^[0-9a-zA-Z._]+$ ]]; thenecho version_name format is rightelseecho version_name=$version_name format errorexit 3fiecho version_name=$version_nameshiftfi;;-path )if [ n$2 != n  ]; thenif [[ $2 == -* ]]; thenecho "No path parameter value"elsepath_name=$2if [ ! -d "$path_name" ]; thenecho "directory is not exist,path_name=$2"exit 4fiecho path_name=$path_nameshiftfifi;;* )echo invalid argument $1usageesacshiftdone
fi#获取当前的时间戳的方法
if [ $version_name == flag_0 ]; thenversion_name=$(date +%Y%m%d%H%M)
fi
show_parameters

3、脚本执行:

3.1 执行时带全部参数

./Test_case_parametered.sh -name Sunny -branch feature3 -version 1.5.2 -path /home_local/tester

执行结果:

Total 8 parametersshow_parameters()
name=Sunny
branch_name=feature3
version_name=1.5.2
path_name=/home_local/tester

3.2 执行时不带任何参数

./Test_case_parametered.sh

执行结果:

Total 0 parametersshow_parameters()
name=flag_0
branch_name=flag_0
version_name=202304231957
path_name=flag_0

3.3 执行时只有部分参数

./Test_case_parametered.sh -version 55.uu8

执行结果:

Total 2 parameters
version_name format is right
version_name=55.uu8show_parameters()
name=flag_0
branch_name=flag_0
version_name=55.uu8
path_name=flag_0

3.4 执行时输入错误参数名

./Test_case_parametered.sh -username zhou

执行结果:

Total 2 parameters
invalid argument -username
usage()
The executed format:
./Test_case_parametered.sh -name xxx -branch xxx -version xxx -path xxx

3.5 执行时输入不合法参数值

./Test_case_parametered.sh -branch dev33

执行结果:

Total 2 parameters
branch_name must be master or dev or feature*

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102590.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python实现自动点击功能

猜你感兴趣 使用Pyqt5玩转ChatGpt内网文件共享服务快速搭建私有pip镜像源python设计模式-创建型模式docker搭建私有git服务器&#xff0c;项目备份和迁移redis持久化方案 被测点击界面 新建counter.html添加下面代码并保存,使用编辑器或浏览器打开 <!DOCTYPE html> &l…

23.4.21总结

正则表达式 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串&#xff0c;通常被用来检索、替换那些符合某个模式&#xff08;规则&#xff09;的文本。 正则表达式是一种对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些…

深度学习 - 42.特征交叉与 SetNET、Bilinear Interaction 与 FiBiNet

目录 一.引言 二.摘要 - ABSTRACT 三.介绍 - INTRODUCTION 四.相关工作 - RELATED WORK 1.因式分解机及其变体 - Factorization Machine and Its relevant variants 2. 基于深度学习的点击率模型 - Deep Learning based CTR Models 3.SENET Module 五.FiBiNet Model 1…

【C++】哈希的应用:位图和布隆过滤器

目录 1. 位图1.1 位图的概念1.2 位图的结构1.3 位图的实现 2. 布隆过滤器2.1 概念2.2 结构2.3 布隆过滤器的实现 1. 位图 1.1 位图的概念 &#x1f4ad;位图&#xff08;bitset&#xff09;是一种基于哈希思想设计的数据结构&#xff0c;其功能主要用于判断数据是否已存在。适…

来使用分支语句和循环语句实现一个小游戏吧(猜数字游戏)

猜数字游戏 1.代码展示2.菜单设计3.主函数部分3.随机数设计 所属专栏&#xff1a;C语言 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyang785 感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持&#xff01;&#xff01;&#xff01; 博主也会更加的努力&am…

rtthread默认网卡的操作

设置网卡优先级 在 RT-Thread 操作系统中&#xff0c;可以通过修改网卡的优先级来设置默认网卡。优先级越高的网卡会被优先选择为默认网卡。 下面介绍一些设置默认网卡优先级的方法&#xff1a; 在 RT-Thread 的网络配置文件 rtconfig.h 中&#xff0c;可以通过修改 NETIF_P…

Jmeter5.1.1报错:java.net.BindException: Address already in use: connect

Jmeter5.1.1报错&#xff1a;java.net.BindException: Address already in use: connect 原因&#xff1a;从网上找到资料&#xff1a;端口占用 Windows提供给TCP/IP链接的端口为 1024-5000&#xff0c;并且要四分钟来循环回收它们&#xff0c;就导致我们在短时间内跑大量的请…

把ChatGPT训练成你的得力助手

在调教chatgpt时&#xff0c;我们大部分的时候都需要一个好的学术翻译官&#xff0c;但是在他成为学术翻译官之前我们有很多规定要说明&#xff0c;比如不用回答我的问题&#xff0c;不用计算公式等。我将以下命令要求集成&#xff0c;在使用的时候只需要你发给它这段话&#x…

如何评估小程序开发费用:从项目规模到技术需求

作为一种越来越受欢迎的移动应用&#xff0c;小程序的开发费用是许多企业和个人考虑的重要因素之一。但是&#xff0c;要确定小程序开发费用并不是一件容易的事情&#xff0c;因为它涉及到多个因素&#xff0c;从项目规模到技术需求。 项目规模 小程序开发的费用通常与项目规…

Linux部署人大金仓(Kingbase8)

陈老老老板&#x1f9b8; &#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-人大金仓&#xff08;kingbase8&#xff09;&#xff08;主要讲一些人大金仓数据库相关的内容&#xff09; &#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下LInux上部署人大…

Vue+Echarts 项目演练(中)后台数据接口的创建

全局引用Echarts与axios 后台接口创建express路由 api接口数据创建 全局引用Echarts与axios vue3.0的挂载方式&#xff1a;使用Provide/Inject依赖注入&#xff0c;将替代vue2中在原型链上挂载一些属性在app.vue中使用provider来给后代们提供数据 <script> import { p…

经典数据结构之2-3树

2-3树定义 2-3树&#xff0c;是最简单的B-树&#xff0c;其中2、3主要体现在每个非叶子节点都有2个或3个子节点&#xff0c;B-树即是平衡树&#xff0c;平衡树是为了解决不平衡树查询效率问题&#xff0c;常见的二叉平衡书有AVL树&#xff0c;它虽然提高了查询效率&#xff0c…

深入JVM了解Java对象实例化过程

文章目录 一、对象创建方式二、对象产生步骤1、判断对象是否已经加载、链接、初始化2、为对象分配内存空间3、处理并发问题3.1 TLAB 4、初始化零值5、完善对象内存布局的信息6、调用对象的实例化方法 <init>7、总结 三、对象的内存布局1、对象头1.1 运行时元数据&#xf…

详解树与二叉树的概念,结构,及实现(上篇)

目录 一&#xff0c; 树 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 二&#xff0c; 二叉树 2.1二叉树概念 三&#xff0c;特殊的二叉树 1. 满二叉树 2. 完全二叉树 3. 1 二叉树的性质 3. 2 二叉树的存储…

【速卖通】 AliExpress(速卖通)关键词搜索结果采集

采集场景 在AliExpress(速卖通) 首页中 http://www.aliexpress.com 中输入关键词&#xff0c;采集关键词搜索后得到的商品列表信息。 采集字段 关键词、标题、商品id、商品图片地址、商品详情链接、价格、免费退送货、星级、已出售数量、店铺名 采集结果 采集结果可导出为E…

Linux-初学者系列——篇幅7_文本编辑和处理命令

文本编辑和处理命令-目录 一、系统基本编辑命令安装vim软件工具包语法格式&#xff1a; 1、vim编辑命令模式01 普通模式02 编辑模式03 命令模式 2、编辑文件技巧01 批量删除多行指定信息02 批量增加多列指定信息03 编辑常见问题错误1&#xff1a;没有指定编辑信息错误2&#xf…

基于TensorRT的yolov5 实例分割部署

yolov5-7.0 github: https://github.com/ultralytics/yolov5/tree/master 1. 代码的使用 1.1 训练yolov5-seg模型 使用的yolov5-7.0的代码,github下载:https://github.com/ultralytics/yolov5/releases/tag/v7.0 训练指令 python segment/train.py --data coco128-seg.y…

centos7 查看服务器配置信息

1.linux查看版本当前操作系统发行信息 cat /etc/centos-release cat /etc/centos-release 2、查看内核版本uname -a或者cat /proc/version 3、查看CPU参数 1&#xff09;、查看 CPU 物理个数   grep physical id /proc/cpuinfo | sort -u | wc -l 2&#xff09;、查看 CPU …

SpringCloud:ElasticSearch之DSL查询文档

elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如…

magento webapi 接口返回 json对象

前言 现在主流的项目开发都是前后端分离&#xff0c;数据通过json对象格式进行传输。但是magento框架&#xff0c;和传统PHP框架相比&#xff0c;区别很大。虽然也支持以RestApi的形式传输数据&#xff0c;但是要么格式并非是传统jsonObject要么就是需要大量的get、set方法。本…