shell_46.Linux使用 getopts 命令

2023-10-25 08:44

本文主要是介绍shell_46.Linux使用 getopts 命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用 getopts 命令
getopt 与 getopts 的不同之处在于,前者在将命令行中选项和参数处理后只生成一个输出,而后者能够和已有的 shell 位置变量配合默契。
getopts 每次只处理一个检测到的命令行参数。在处理完所有的参数后,getopts 会退出并返回一个大于 0 的退出状态码。这使其非常适合用在解析命令行参数的循环中。
getopts 命令的格式如下:

getopts optstring variable


getopts 命令要用到两个环境变量。如果选项需要加带参数值,那么 OPTARG 环境变量保存的就是这个值。
OPTIND 环境变量保存着参数列表中 getopts 正在处理的参数位置。这样在处理完当前选项之后就能继续处理其他命令行参数了。
例子:

$ cat extractwithgetopts.sh 
#!/bin/bash 
# Extract command-line options and values with getopts 
# 
echo 
while getopts :ab:c opt     #######while 语句定义了 getopts 命令,指定要查找哪些命令行选项,以及每次迭代时存储它们的变量名(opt)。
do case "$opt" in a) echo "Found the -a option" ;; b) echo "Found the -b option with parameter value $OPTARG";; c) echo "Found the -c option" ;;*) echo "Unknown option: $opt" ;; esac 
done 
exit 
$ 
$ ./extractwithgetopts.sh -ab BValue -c 
Found the -a option 
Found the -b option with parameter value BValue 
Found the -c option 
$

getopts 命令有几个不错的特性。可以在参数值中加入空格:

$ ./extractwithgetopts.sh -b "BValue1 BValue2" -a 
Found the -b option with parameter value BValue1 BValue2 
Found the -a option 
$ 

另一个好用的特性是可以将选项字母和参数值写在一起,两者之间不加空格:

$ ./extractwithgetopts.sh -abBValue 
Found the -a option 
Found the -b option with parameter value BValue 
$

getopts 命令能够从-b 选项中正确解析出 BValue 值。除此之外,getopts 命令还可以将在命令行中找到的所有未定义的选项统一输出成问号:

$ ./extractwithgetopts.sh -d 
Unknown option: ? 
$ 
$ ./extractwithgetopts.sh -ade 
Found the -a option 
Unknown option: ? 
Unknown option: ? 
$

在处理每个选项时,getopts
会将 OPTIND 环境变量值增 1。处理完选项后,可以使用 shift 命令和 OPTIND 值来移动参数:

$ cat extractoptsparamswithgetopts.sh 
#!/bin/bash 
# Extract command-line options and parameters with getopts
# 
echo 
while getopts :ab:cd opt 
do case "$opt" in a) echo "Found the -a option" ;; b) echo "Found the -b option with parameter value $OPTARG";; c) echo "Found the -c option" ;; d) echo "Found the -d option" ;; *) echo "Unknown option: $opt" ;; esac 
done 
# 
shift $[ $OPTIND - 1 ] 
# 
echo 
count=1 
for param in "$@" 
do echo "Parameter $count: $param" count=$[ $count + 1 ] 
done 
exit 
$
$ ./extractoptsparamswithgetopts.sh -db BValue test1 test2 
Found the -d option 
Found the -b option with parameter value BValue 
Parameter 1: test1 
Parameter 2: test2 
$

这篇关于shell_46.Linux使用 getopts 命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/281384

相关文章

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

MySQL分区表的具体使用

《MySQL分区表的具体使用》MySQL分区表通过规则将数据分至不同物理存储,提升管理与查询效率,本文主要介绍了MySQL分区表的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、分区的类型1. Range partition(范围分区)2. List partition(列表分区)3. H

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与