linux bash shell的getopt以及函数用法小记

  • getopt 长选项 短选项 可选参数
  • while
  • case
  • if
  • basename
  • 函数
  • 变量
  • shift
  • read

实现功能描述:

1. 实现可选参数传入 -c 或 --clearBuild。

2. 用shell脚本来实现选择,make时是否clean。

3. 可以打印用法帮助 和 作者信息。

#!/bin/bash# sh函数定义 *************************** 
usage()
{sh_name=$(basename $1);# sh_name='basename $1';  #或者这个echo "---------------用法:      $sh_name [选项] <(可选) -c >  <(可选) --clearBuild >命令行选项:-c  或 --clearBuild     默认: 0,表示是否清除make build的内容,数值为1表示清理,为0表示直接构建可选选项:-h  或 --help           打印帮助信息-a  或 --author         打印作者信息---------------"exit 1;
}
author()
{sh_name=$(basename $1);# sh_name='basename $1';  #或者这个 
echo "---------------脚本:  $sh_name 作者:  WJH    ---------------"exit 1;
}fun1_make()
{if [ "$1" = "clear" ] ; then# echo '执行清理并构建文件';echo 'in fun1_make(): 先clean 然后 make';# your cmd .....else# echo "不清除已经构建好的文件"echo "in fun1_make(): 直接make"# your cmd .....fi
}# sh变量定义与接收 *************************** # 输入指令
parameters=$(getopt -a -o c::ha -l clearBuild::,help,author -n "$0" -- "$@")
# echo "原始参数origin param is $@"if [ $? != 0 ]; thenecho "脚本解析失败..."; exit 1;
fi
# set命令将规范化后的命令参数分配到位置参数 $1 $2上面
eval set  -- "${parameters}"
# echo "规范后参数formatetd parameters=[$@]"# sh识别输入的选项·参数 *************************** 
while true; 
docase "$1" in-c | --clearBuild)case "$2" in"") echo "选项 --clearBuild 无参数";    clearBuild=${clearBuild:=1};  #赋默认值shift 2;  # 可选参数仍有空参数,需要shift 2, ;;*) echo "选项 --clearBuild 参数为:$2";  clearBuild=$2;  shift 2;;;esac;;-h|--help)usage $0 ;;;-a|--author)author $0 ;;;--)echo "clearBuild 默认值 1, clearBuild 现在数值:$clearBuild"; # 默认值见 68行echo "-----------------";  shift 1; break; ;;*)echo "Internal error!!!";  exit 1 ;;;esac
done# sh业务逻辑 *************************** # 比较字符串是否相等用 =, 并在两边留空格
# 比较数字用 -eq -gt -lt 等,分别为 equal; greater than; less than;等
if [ "$clearBuild" = "1" ] ; then  # 输入了 选项时 或 可选参数时  echo '>>>执行清理,然后构建';fun1_make clear;# your cmd .....elif [ "$clearBuild" = "0" ] ; then # 输入了 选项时 或 可选参数时 echo ">>>直接构建"fun1_make direct_build;# your cmd ..... else                                # 未输入 选项时 read -p '未输入 选项时:输入clear 确认清除并重新构建; 输入不为clear,直接构建  : ' tmp2if [ "$tmp2" = "clear" ] ; thenecho ">>>执行清理,然后构建";fun1_make $tmp2;# your cmd ..... else echo ">>>直接构建"fun1_make $tmp2;# your cmd .....fifiecho "-----------------";

参考文章

1.设计shell脚本选项:getopt - 骏马金龙 - 博客园 (cnblogs.com)

2.081_扩展篇_Shell编程(七)_函数(二)_自定义函数_哔哩哔哩_bilibili

3.Linux——shell脚本的传参方式 - moutory - 博客园 (cnblogs.com) 

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

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

相关文章

vue3 实现上传图片裁剪

在线的例子以及代码&#xff0c;请点击访问链接

实力上榜!安全狗入选《CCSIP 2023中国网络安全行业业全景册(第六版)》多个细项

1月24日&#xff0c;Freebuf发布了《CCSIP 2023中国网络安全行业业全景册&#xff08;第六版&#xff09;》。 作为国内云原生安全领导厂商&#xff0c;安全狗也入选多个细分领域。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;创办于2013年&…

学习gin框架知识的小注意点

Gin框架的初始化 有些项目中 初始化gin框架写的是&#xff1a; r : gin.New() r.Use(logger.GinLogger(), logger.GinRecovery(true)) 而不是r : gin.Default() 为什么呢&#xff1f; 点击进入Default源码发现其实他也是new两个中间件&#xff0c;&#xff08;Logger&…

【并发编程】锁死的问题——如何解决?以及如何避免?

目录 1.如何解决 一、死锁的定义和原因 1.1 定义 1.2 原因 二、常见的死锁场景 2.1 线程间相互等待资源 2.2 嵌套锁的循环等待 2.3 对资源的有序请求 三、死锁排查的方法 3.1 使用jstack命令 3.2 使用jconsole 3.3 使用VisualVM 四、常见的解决方案 4.1 避免嵌套锁…

深入研究C语言数组:高级技巧和性能优化的探索

在前文中&#xff0c;我们介绍了C语言数组的基本概念、多维数组的使用以及作为函数参数的传递方式。本文将进一步探索C语言数组的高级用法和性能优化技巧&#xff0c;帮助读者更深入地理解和运用数组。 动态数组 C语言中&#xff0c;数组的大小在创建时就被确定了&#xff0c…

STK姿态分析(一)矢量组件

文章目录 内容简介一、卫星矢量二、卫星坐标平面三、卫星姿态球面 – 内容简介 接下来一系列文章将进行STK目标&#xff08;卫星、导弹、火箭、飞机、船舶&#xff09;姿态分析的仿真。本篇将使用矢量&#xff08;vector&#xff09;组件对卫星姿态、传感器指向等进行3D可视化…

注册表学习——注册表结构

简介&#xff1a;注册表是由很多项和值构成的。 HEKY_USERS&#xff08;HKU&#xff09; 主要保存默认用户及当前登录用户配置信息。 .DEFAULT 该项是针对未来创建的新用户所保存的默认配置项。 S-1-5-18等项 这些项叫作安全标识符&#xff08;SID&#xff09;用来表示Windows操…

Maven 跳过test 进行 package

在使用Maven构建项目时&#xff0c;如果你想要跳过测试阶段&#xff08;test phase&#xff09;并直接打包&#xff08;package&#xff09;&#xff0c;你可以在命令行中使用特定的Maven命令选项。以下是一些常用的命令和选项&#xff1a; 1. 使用-DskipTests选项&#xff1a…

Linux(linux版本 centos 7) 下安装 oracle 19c详细教程(新手小白易上手)

一、安装前准备 1、下载预安装包 wget http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm预安装包下载成功 2、下载oracle安装包 下载地址如下 https://www.oracle.com/cn/database/technologies…

渲染与创造之美:互为表里的艺术

在五彩斑斓的艺术世界中&#xff0c;渲染与创造是两股不可或缺的力量。它们之间的关系&#xff0c;恰如弓与箭&#xff0c;互为表里&#xff0c;共同塑造出无数令人叹为观止的视觉景象。创造之美是指通过创新思维和创造力&#xff0c;将想象具象化为现实&#xff0c;创造出新的…

spring-aop的介绍和使用

目录 1&#xff1a;为什么我会使用这个框架 2&#xff1a;那怎么快速入手属于自己的spring-aop呢&#xff08;或者说怎么在自己项目调用spring-aop这个框架呢&#xff09; 1->环境&#xff08;自己去建一个maven项目&#xff09; 2->导入spring-aop框架包&#xff08…

Python全自动性能无人机

Python全自动性能无人机研发开发的重要性可以从以下几个方面进行阐述&#xff1a; 编程语言的灵活性&#xff1a;Python是一种高级编程语言&#xff0c;具有简单易学的特点&#xff0c;能够快速地实现想法并进行快速原型设计。这种灵活性使得Python成为开发无人机控制系统的理想…

Linux命令-apachectl命令(Apache服务器前端控制工具)

apachectl命令 是Apache的Web服务器前端控制工具&#xff0c;用以启动、关闭和重新启动Web服务器进程。 语法 apachectl (参数)参数 configtest&#xff1a;检查设置文件中的语法是否正确&#xff1b;fullstatus&#xff1a;显示服务器完整的状态信息&#xff1b;graceful&a…

引领未来:云原生在产品、架构与商业模式中的创新与应用

文章目录 一、云原生产品创新二、云原生架构设计三、云原生商业模式变革《云原生落地 产品、架构与商业模式》适读人群编辑推荐内容简介目录 随着云计算技术的不断发展&#xff0c;云原生已经成为企业数字化转型的重要方向。接下来将从产品、架构和商业模式三个方面&#xff0c…

最小覆盖子串(Leetcode76)

例题&#xff1a; 分析: 比如现在有字符串&#xff08;s&#xff09;&#xff0c;s "ADOBECODEBANC", 给出目标字符串 t "ABC", 题目就是要从原始字符串&#xff08;s&#xff09;中找到一个子串&#xff08;res&#xff09;可以覆盖目标字符串 t &…

微信小程序(十六)slot插槽

注释很详细&#xff0c;直接上代码 上一篇 温馨提醒&#xff1a;此篇需要自定义组件的基础&#xff0c;如果不清楚请先看上一篇 新增内容&#xff1a; 1.单个插槽 2.多个插槽 单个插糟 源码&#xff1a; myNav.wxml <view class"navigationBar custom-class">…

师如灯塔,照我前行:我在誉天的RHCA认证之旅

时光荏苒&#xff0c;岁月如梭。2022年10月&#xff0c;我踏上了通向RHCA&#xff08;Red Hat Certified Architect&#xff09;证书的征程。2023年11月&#xff0c;我成功拿到了RHCA证书&#xff0c;也给这段旅程画上了圆满的句号。 而在这充满挑战和成长的旅程中&#xff0c;…

防火墙ip配置

如图所示需要配置该拓扑的ip 1.首先在交换机7上创建vlan 2 3 [Huanwei]vlan batch 2 3 2.分别进入0/0/3 和0/0/2接口 [Huawei-GigabitEthernet0/0/3]port link-type access [Huawei-GigabitEthernet0/0/2]port link-type access 3.定义所属vlan [Huawei-GigabitEthernet0…

【python爬虫】爬虫编程技术的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a; 爬虫】网络爬虫探秘⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f33c;实验目的 &#x1f…

ARM架构SOC运行Linux的典型启动流程

ARM架构SOC运行Linux的典型启动流程 对于运行linux的ARM架构的SOC来说,典型的启动流程应该从上电开始。通常经过:上电复位、Boot模式选择、Boot ROM加载、Boot Flash加载、Bootloader加载、Linux内核加载、Linux内核启动、用户空间初始化、用户空间运行。 一、上电复位 当…