当前位置: 首页 > news >正文

浅谈Linux bash脚本----getopts获取脚本POSIX标准传参

getopts是一个在 Shell 脚本中用于解析命令行选项的内置命令。

它用于处理脚本的参数,使得脚本可以接受不同的选项和参数,并根据用户提供的输入采取相应的操作。

getopts 命令基于 POSIX 标准,并且通常与 while 循环结合使用。它的语法如下:

while getopts "<options>" opt; docase $opt in<option1>)# 处理 option1 的操作;;<option2>)# 处理 option2 的操作;;\?)# 处理无效选项的操作或错误提示echo "Invalid option: -$OPTARG";;esac
done

其中,<options>为该脚本程序接受的参数列表,每个参数用一个字母表示;getopts会随着while循环挨个遍历参数列表,opt为匹配到的参数字符,OPTARG为当前匹配到的参数值,如果有的话。

比非所有参数都有值,可以在配置<options>参数列表时用冒号:标记改参数是否有值,例如:

#!/bin/bash
# file_name: my_script.shwhile getopts ":a:b:cde:fgh" opt
docase $opt ina)echo "Option -a is set with value $OPTARG";;b)echo "Option -b is set with value $OPTARG";;c)echo "Option -c is set";;d)echo "Option -d is set";;e)echo "Option -e is set with value $OPTARG";;f)echo "Option -f is set";;g)echo "Option -g is set";;h)echo "Option -h is set";;\?)echo "Invalid option: -$OPTARG";;esac
done
./my_script.sh -a apple -b36 -c -d -e ays -ghf -xyz
#>Option -a is set with value apple
#>Option -b is set with value 36
#>Option -c is set
#>Option -d is set
#>Option -e is set with value ays
#>Option -g is set
#>Option -h is set
#>Option -f is set
#>Invalid option: -x
#>Invalid option: -y
#>Invalid option: -z

总结一下,getopts从第一个脚本命令行参数开始,假如是以-开头,则识别为是传参,取-后面的一个字母做为传参名,然后到getopts配置的<options>参数列表中检查该传参是否有值。

如果该传参有配置值,取该命令行参数剩余部分为参数值,如果剩余部分为空字符串,则取下一个命令行参数做为参数值(不管下一个命令行参数是否以-开头);

如果该传参没有配置值,且当前命令行参数还有其他字符,则取下一个字符做为传参,继续判断;

如果该传参没有配置值,且当前命令行参数没有其他字符,则取下一个命令行参数,继续判断;

如果遇到一个命令行参数不是以-开头,或所有命令行参数遍历结束,getopts返回False,while循环结束;

<options>列表最前面一个:冒号可以适配未知传参,也可以理解为是无名传参,进而将其后面的字符串做为传参的值,然后进入case \?)分支。

相关文章:

浅谈Linux bash脚本----getopts获取脚本POSIX标准传参

getopts是一个在 Shell 脚本中用于解析命令行选项的内置命令。 它用于处理脚本的参数&#xff0c;使得脚本可以接受不同的选项和参数&#xff0c;并根据用户提供的输入采取相应的操作。 getopts 命令基于 POSIX 标准&#xff0c;并且通常与 while 循环结合使用。它的语法如下…...

PyCharm玩转ESP32

想必玩ESP32的童鞋都知道Thonny&#xff0c;当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较&#xff0c;今天重点说一下用PyCharm玩转ESP32&#xff0c;在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…...

uniapp自定义导航栏返回按键

目录 htmljscss最后 html <!-- #ifdef MP-WEIXIN || APP-PLUS --> <view class"tc header":style"topBarHeight() 0 ? : height: topBarHeight() px;padding-top: topBarTop() px"><view class"reg180" :style"top…...

「可移动工具车」物料管理的得力助手

随着工业制造企业不断发展&#xff0c;仓储的运营变得越来越重要&#xff0c;物料高效管理也迎来了新的挑战&#xff0c;工厂物料管理直接影响着生产效率和成本控制&#xff0c;不合理的物料管理可能导致物料溢出、过度库存、损耗增加等问题&#xff0c;进而影响企业的整体竞争…...

授时小课堂——北斗卫星信号和GPS卫星信号谁更强?

北斗卫星信号好还是GPS信号更胜一筹呢&#xff1f;下面小编带大家一起来比较一下看看吧。 1. 系统覆盖范围 北斗卫星导航系统是中国自主研发的授时定位系统&#xff0c;其覆盖范围包括全球各个地区。但在海外地区&#xff0c;主要还是东南亚、南亚、中亚等地区&#xff0c;北斗…...

网站会遭受那些攻击,要怎么应对

随着互联网的普及和发展&#xff0c;很多企业或个人都建立了自己的网站&#xff0c;这些网站不仅可以展示企业或个人的信息&#xff0c;还可以提供各种服务和交流平台。但是&#xff0c;在运营网站的过程中&#xff0c;很多人都会遇到网站被流量攻击的情况&#xff0c;这种情况…...

后端-锁专题:synchronized(java对象结构、锁的类型、锁升级流程...)

文章目录 对象的结构以及大小内存换算java的常见数据类型以及所占字节数分析对象总共占多少字节&#xff0c;各项占多少字节对象头结构 锁类型锁升级流程 对象的结构以及大小内存换算 java的常见数据类型以及所占字节数 String&#xff1a;8字节 64位 int&#xff1a;4字节 …...

vscode在运行c语言时,无法scanf输入

问题&#xff1a; 在学习c语言中&#xff0c;我在使用scanf和cin时无法在终端进行输入(运行了但是无法输入)&#xff0c;在网上寻找答案&#xff0c;并写下笔记 解决方法 选择左上角 文件->首选项&#xff08;preferences&#xff09;->设置&#xff08;settings&#xf…...

ROLLUP 的几点说明(十七)

ROLLUP 最根本的作用是提高某些查询的查询效率&#xff08;无论是通过聚合来减少数据量&#xff0c;还是修改列顺序以匹配前缀索引&#xff09;。因此 ROLLUP 的含义已经超出了“上卷”的范围。这也是为什么在源代码中&#xff0c;将其命名为 Materialized Index&#xff08;物…...

项目经理面试题持续更新

1.项目中常用的文档有哪些&#xff1f; 1、可行性报告 可行性报告的目的是调查和展示任务要求&#xff0c;并确定项目是否值得和可行。可行性由五个主要因素验证——技术和系统、成本、法律、运营和进度。次要可行性因素包括市场、资源和文化因素。 2、项目章程 项目章程是证明…...

基于JavaWeb+SSM+Vue校园水电费管理小程序系统的设计和实现

基于JavaWebSSMVue校园水电费管理小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 III Abstract 1 1 系统概述 2 1.1 概述 2 1.2课题意义 3 1.3 主要内容 3…...

主从复制读写分离?

主从复制和读写分离是常见的数据库架构策略&#xff0c;它们可以提高系统的性能和可靠性。下面是一个简单的实现方法&#xff1a; 主从复制&#xff1a; 配置主数据库&#xff1a;在主数据库上启用二进制日志&#xff08;binary log&#xff09;&#xff0c;用于记录所有修改数…...

h5小游戏-盖楼游戏

盖楼游戏 一个基于JavaScrtipt、Html5 的盖楼游戏 效果预览 点我下载源代码 Game Rule 游戏规则 以下为默认游戏规则&#xff0c;也可参照下节自定义游戏参数 每局游戏生命值为3&#xff0c;掉落一块楼层生命值减1&#xff0c;掉落3块后游戏结束&#xff0c;单局游戏无时间限…...

量子计算的发展

目录 一、量子力学的发展历程二、量子计算的发展历程三、量子计算机的发展历程四、量子信息科学的发展 一、量子力学的发展历程 量子力学是现代物理学的一个基本分支&#xff0c;它的发展始于20世纪初。以下是量子力学发展的几个重要阶段&#xff1a; 普朗克&#xff08;1900&…...

YOLOv3老矣尚能战否?基于YOLOv3开发构建建钢铁产业产品智能自动化检测识别系统,我们来与YOLOv5进行全方位对比评测

钢铁产业产品智能自动化检测识别相关的项目在我们前面的博文中已经有了相应的实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a;《python基于DETR(DEtection TRansformer)开发构建钢铁产业产品智能自动化检测识别系统》 《AI助力钢铁产业数字化&#xff0c;pytho…...

【lodash】 关于Some的相关用法

1. 判断集合某个字段是否存在小于0 的 使用 lodash 库的 some 函数可以用来判断集合中某个字段是否存在小于 0 的值。你可以使用以下代码实现&#xff1a; const _ require(lodash);const collection [{ id: 1, value: 10 },{ id: 2, value: -5 },{ id: 3, value: 20 }, ];…...

JavaScript基础—引入方式、注释和结束符、输入和输出、变量、常量、数据类型、检测数据类型、类型转换、综合案例—用户订单信息

版本说明 当前版本号[20231123]。 版本修改说明20231123初版 目录 文章目录 版本说明目录JavaScript 基础 - 第1天介绍引入方式内部方式外部形式 注释和结束符单行注释多行注释 结束符输入和输出输出输入 变量声明赋值变量初始化更新变量 关键字变量名命名规则 常量数据类型…...

替换jar文件中的jar文件中的class

文件格式 testjar.jar在ruoyi.jar中。 AssetServiceImpl.class在testjar.jar 查找testjar.jar路径 jar -tvf ruoyi.jar | grep testjar.jar 解析testjar.jar jar -xvf ruoyi.jar BOOT-INF/lib/testjar.jar 查找class文件路径 jar -tvf testjar.jar | grep AssetServiceImp…...

基于51单片机倾角MPU6050老人跌倒远程GSM短信报警器+源程序

一、系统方案 1、本设计采用这51单片机作为主控器。 2、MPU6050角度值送到液晶1602显示。 3、红外传感器检测心率。 4、跌倒远程GSM报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void LCD_Init() //初始化液晶时间显示 { write_com…...

代码规范有用吗?听听100W年薪谷歌大佬怎么说!

谷歌内部的 python 代码规范 熟悉 python 一般都会努力遵循 pep8 规范&#xff0c;也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言&#xff0c;而是让大家遵守同一套规则&#xff0c;节省其他人阅读代码的成本&#xff0c;方便协作…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...