shell脚本中getopts的使用

news2024/11/25 23:01:06

      在shell中,getopts用于解析命令选项和参数。getopts是Bash shell的内置命令,不支持长选项,仅解析短选项,即一个破折号("-")和一个字母或数字,如-1,-e, -E等。
      getopts格式如下:

getopts OptString Name [Arg ...]

      1.getopts命令后面的字符串如":a:c:Fg:"就是可以使用的选项列表即OptString,每个字符代表一个选项,后面带冒号(:)的意味着选项除了定义本身之外,还会带上一个参数作为选项的值。
      2.每次调用getopts命令时,它都会查找OptString中定义的一个选项。如果找到,它会将此选项字符放入名为Name的变量中。如果选项与OptString中定义的选项不匹配,则getopts将变量Name设置为问号("?").如果该选项需要一个参数,getopts会获取该参数,并将其存放于$OPTARG中。如果未找到所需的参数,则变量Name将设置为冒号
      3.两个预先定义的变量:
      (1).OPTARG:用来获取当前选项的参数值;
      (2).OPTIND:代表当前选项在选项列表中的索引位置;当shell脚本启动时,OPTIND的值为1;处理一个开关型选项,OPTIND加1;处理一个带参数的选项,OPTIND会加2。
      4.如果OptString中第一个字符是冒号,getopts使用静默错误报告(getopts uses silent error reporting),在此模式下,不会打印任何错误消息;如果第一个字符不是冒号,如果命令行中包含了没有在getopts列表中的选项,会有警告信息,类似illegal option -- x;
      5.字符后面带冒号(:),表示该选项应该有一个参数,在命令行中用空格与其分开(或紧挨着)若字符后面没有冒号,表示不需要参数
      6.getopts处理父命令(parent command)的位置参数,在bash中,它存储在shell变量"$@"中。
      7.两个破折号("--")的特殊选项被getopts解释为选项的结尾
      8.getopts设计为在脚本中多次运行,例如循环运行。它每次循环迭代处理一个选项。当没有更多选项需要处理时,getopts返回false,这会自动终止while循环。因此,getopts经常和while一起使用。

      测试代码如下:

#! /bin/bash

author=""
addr_csdn=""
addr_github=""

echo "all parameters: $@"

OptString=":a:c:Fg:"
while getopts ${OptString} name; do
#while getopts "a:c:Fg:" name; do
    case "$name" in
        "a")
            echo "option: $name, value is: $OPTARG, index is: $OPTIND"
            author=$OPTARG ;;
        "c")
            echo "option: $name, value is: $OPTARG, index is: $OPTIND"
            addr_csdn=$OPTARG ;;
        "g")
            echo "option: $name, value is: $OPTARG, index is: $OPTIND"
            addr_github=$OPTARG ;;
        "F")
            echo "option: $name, shell script name: $0, index is: $OPTIND" ;;
        ":")
            echo "Error: missing parameter value: ${OptString}, index is: $OPTIND"
            exit 1 ;;
        "?")
            echo "Error: unknown option: ${OptString}, index is: $OPTIND"
            exit 1 ;;
        "*") # exit abnormally
            echo "** abort **"
            exit 1 ;;
    esac
done

if [ ! -z ${author} ]; then
    echo "author: ${author}"
fi

if [ ! -z ${addr_csdn} ]; then
    echo "csdn addr: ${addr_csdn}"
fi

if [ ! -z ${addr_github} ]; then
    echo "github addr: ${addr_github}"
fi

echo "processed parameters OPTIND: $OPTIND"

echo "remove processed parameters"
# shift is a bash built-in which kind of removes arguments from the beginning of the argument list
shift $((OPTIND-1))

echo "remaining parameters: $@"
echo "test finish"

      在windows和linux上执行结果相同,如下:

      GitHub:https://github.com/fengbingchun/Linux_Code_Test

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

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

相关文章

ATF(TF-A)之sonarlint静态代码分析实战

ATF(TF-A)/OPTEE之静态代码分析汇总 一、ATF源码下载及分析 对ATF实施soanrlint静态代码扫描之前,先到官方网站下载源码。官方网站位于github,网址 GitHub - ARM-software/arm-trusted-firmware: Read-only mirror of Trusted Firmware-A。 各发布版本及对应的时间节点如下…

算法图解注疏(待续)

目录 算法简介二分查找简单查找更佳的查找方式二分查找的几种模板模板1模板2模板3 运行时间 大O表示法大O表示法指出了最糟情况下的运行时间一些常见的大O运行时间 O(n!)旅行商问题 选择排序内存的工作原理数组和链表选择排序 递归基线条件和递归条件栈递归调用栈 快速排序分而…

Istio Pilot源码学习(二):ServiceController服务发现

本文基于Istio 1.18.0版本进行源码学习 4、服务发现:ServiceController ServiceController是服务发现的核心模块,主要功能是监听底层平台的服务注册中心,将平台服务模型转换成Istio服务模型并缓存;同时根据服务的变化&#xff0c…

MongoDB 的日常使用

一、简介 1、 常见的数据库分类 RDBMS(关系型数据库):常见的关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL; NoSQL(非关系型数据库):常见的非关系型数据库有 …

算法笔记(java)——回溯篇

回溯算法解决问题最有规律性,借用一下卡哥的图: 只要遇到上述问题就可以考虑使用回溯,回溯法的效率并不高,是一种暴力解法,其代码是嵌套在for循环中的递归,用来解决暴力算法解决不了的问题,即…

【机器学习】模型常用评估指标

L0 范数、L1 范数、L2 范数、余弦距离 向量的范数可以简单形象理解为向量的长度,或者向量到零点的距离,亦或是相应两个点之间的距离。因此范数通常会对应一个距离概念。 L0 范数 L0 范数表示向量中非零元素的个数: ∣ ∣ x ∣ ∣ 0 # ( i…

elasticsearch IK分词器

说明:es默认的分词器对中文的识别不是特别好,一段话的分词是一个一个汉字,这显然没有达到想要的结果。 可以安装IK分词器,兼容中文的分词; IK分词器 安装 安装IK分词器,例如elasticsearch的容器名为es&a…

探索Java并发编程利器:LockSupport,一种高效的线程阻塞与唤醒机制

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、用法四、原理五、线程等待和唤醒的方法5.1 Lo…

Microsoft Edge 浏览器的Bing Chat

微软公司持续发力,推出的产品 Bing Chat 与 ChatGPT 之间的竞争愈发激烈。如今,微软不仅不断更新 Edge 浏览器,还将 Bing Chat 内置在边栏中,方便用户快速访问。这一举措不禁让人想起,Edge 浏览器如今已经是一款名副其…

Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin

Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin 1. 前言Maven的两种打包方式 2. 流程图3. spring-boor-maven-plugin打包4. maven-jar-plugin/maven-dependency-plugin打包 1. 前言 Maven的两种打包方式 spring-boot-maven-plugin springboot默认打包方…

新星计划联系人列表管理后台(一)-- 搭建项目开发环境

前言:对于前端的内容目前已经发现了很多大佬写的高质量文章,我这里就没必要再重复去造轮子了。接下来我会记录一下我从零到整完成此项目的过程,类似于日记,我会把我开发的步骤、过程中遇到的问题、如何解决此问题的思路、以及get到…

FPGA+EMMC 8通道存储小板

FPGA 采用XILINX公司A7100作为主芯片 AD采用AD7606及一款陀螺仪传感器,可以实时存储到EMMC,系统分为采集模式及回放模式 通过232接口对工作模式进行配置,采样率可以动态配置 回放采用W5100S通过TCP协议进行回放数据

福格行为模型

福格行为模型 福格行为模型也被称为“上瘾模型”,在工作和生活中应用非常的广泛。在工作中:产品设计、用户运营策略、活动设计、广告设计、游戏设计等等;在生活中:学习习惯培养、持续的健身、减肥计划等等。这些事通常大家以为是…

【N32L40X】学习笔记10-外部触发方式计数

定时器采用外部触发方式计数 也就是外部时钟源模式2 此模式由 TIMx_SMCTRL .EXCEN 选择等于 1。计数器可以在外部触发输入 ETR 的每个上升沿或下降沿 计数。 极性选择分频选择过滤选择选择外部时钟ETR模式 bsp_time_counter_ETR.h #ifndef _BSP_TIME_COUNTER_ETR_H_ #defi…

STM32(HAL库)驱动AD8232心率传感器

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 ADC外设配置 2.3 串口外设配置 2.4 GPIO配置 2.5 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 ADC数据采集 3.3 主函数代码整合 4 硬件连接 5 效果展示 1、简介 本文通过STM32…

【车载性能优化】将线程进程运行在期望的CPU核心上

车载Android应用开发中,可能会出现一种奇葩的要求:与用户交互时应用需要全速运行,保证交互的流畅性,但是如果应用进入后台就需要怠速运行,让出更多的资源保证系统或前台应用的流畅度。那么基于这种需求,我们…

深度学习(31)——DeformableDETR(2)

深度学习(31)——DeformableDETR(2) 文章目录 深度学习(31)——DeformableDETR(2)1. backbone——Resnet502. neck——Channel mapper3. DeformableDETRHead4. DeformableDetrTransf…

Linux:多进程和多线程回环socket服务器和客户端

多进程socket服务器代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <ctype.h> #include <sys/wait.h> #i…

JWT 使用

前端访问后台a系统和b系统访问 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO&#xff09;场景。 JWT的本质就是一个…

记录安装DragGAN遇到的问题

首先第一个是安装的问题 安装的envirenment.yml有很多包过时了下载不了&#xff0c;可以参考以下文章写一个requirement.txt来下载依赖环境 --extra-index-url https://download.pytorch.org/whl/cu118 numpy1.23.5 click scipy pillow9.5.0 requests tqdm4.65.0 ninja matpl…