当前位置: 首页 > 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 \?)分支。

相关文章:

  • 弹窗msvcp140_1.dll丢失的解决方法,超简单的方法分享
  • TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖
  • 【Spring进阶系列丨第四篇】学习Spring中的Bean管理(基于xml配置)
  • Vue 2使用element ui 表格不显示
  • iOS APP包分析工具 | 京东云技术团队
  • 分库分表、分布式数据库、MPP
  • appium2.0+ 单点触控和多点触控新的解决方案
  • IDEA前端thymeleaf只显示部分数据库问题
  • 构建个性化预约服务:预约上门服务系统源码解读与实战
  • 基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)
  • C语言实现Linux下TCP Server测试工具
  • C/C++---------------LeetCode第2824. 统计和小于目标的下标对数目
  • C语言之strstr函数的使用和模拟实现
  • 《数据结构、算法与应用C++语言描述》-代码实现散列表(线性探查与链式散列)
  • 在AWS VPC中运行Nagios检查时指定自定义DNS解析器的选项
  • [数据结构]链表的实现在PHP中
  • conda常用的命令
  • ES6语法详解(一)
  • Java的Interrupt与线程中断
  • JWT究竟是什么呢?
  • Sublime text 3 3103 注册码
  • sublime配置文件
  • 大快搜索数据爬虫技术实例安装教学篇
  • 基于webpack 的 vue 多页架构
  • 前端面试之闭包
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 译米田引理
  • 湖北分布式智能数据采集方法有哪些?
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ######## golang各章节终篇索引 ########
  • #define用法
  • #define与typedef区别
  • #pragma预处理命令
  • #VERDI# 关于如何查看FSM状态机的方法
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (03)光刻——半导体电路的绘制
  • (2)空速传感器
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (过滤器)Filter和(监听器)listener
  • (算法)Game
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)setTimeout 和 setInterval 的区别
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ***检测工具之RKHunter AIDE
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET CF命令行调试器MDbg入门(一)
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容