[Shell]命令行选项解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 1.概述getopts从符合标准POSIX.2选项语法的参数列表中获取选项及其参数(也就是,单个字母前面带有 - ,可能后跟参数值;单个字母可以分组)。

1.概述

getopts从符合标准POSIX.2选项语法的参数列表中获取选项及其参数(也就是,单个字母前面带有 - ,可能后跟参数值;单个字母可以分组)。通常,shell脚本使用getopts来解析传递给它们的参数。 当在getopts命令行中指定参数时,getopts将解析这些参数,而不是解析脚本命令行。

Example:

sh test.sh -d 20170120 -p ios -k

getopts就是从上述命令行中获取选项d,p,k以及对应的参数 20170120,ios(如果有)。

2. 语法

getopts optstring name [arg ...]

3. 描述

optstring列出了需要识别脚本中的所有选项字母。 例如,如果需要识别脚本-a,-f和-s选项,则optstring为afs。如果希望识别选项字母以及后面的参数值或值组。例如,请识别脚本-d 20170120 -p ios,则 optstring为d:p:,在字母后面加一个冒号。 所以getopts期望的选项格式:

-o value

通常,选项与参数之间有一个或多个空格,但是getopts也可以处理选项后面直接跟参数的情形,如:

-optvalue

备注

optstring不能包含问号(?)字符。

getopts命令行上的名称是shell变量的名称。 每次调用getopts时,它都会从位置参数中获取下一个选项,并将选项字母放在shell变量名称中。

getopts在名称中放置一个问号(?),如果它找到一个不出现在optstring中的选项,或者缺少一个选项值。

脚本命令行上的每个选项都有一个数字索引。初始索引为1, 找到的一个选项后索引加1,找到一个参数后索引加2,依此类推。 当getopts从脚本命令行获取选项时,它将在shell变量OPTIND中存储要处理的下一个参数的索引。

当一个选项字母有一个关联的参数(在optstring中用a:表示)时,getopts将该参数作为一个字符串存储在shell变量OPTARG中。 如果一个选项没有参数,或getopts期望得到一个参数,但是没有找到,getopts 重置 OPTARG。

当getopts到达选项的末尾时,退出,状态值为1.它还设置名称为字符? 并将OPTIND设置为选项后的第一个参数的索引。 getopts通过以下任何条件识别选项的结束:

  • 不是以 - 开头的参数
  • 特殊参数 - ,标记选项的结束
  • 错误(例如,无法识别的选项字母)

4. Example

#! /bin/bash
echo "init index "${OPTIND}
while getopts 'd:p:k' opt; 
do	
    case ${opt} in
        d)
            date="${OPTARG}";;
        p)
            platform="${OPTARG}";;
	k) 
	    haveKey="true";;
        ?)
            echo "Usage: `basename $0` [options] filename"
	    exit 1
    esac
    echo "opt is "${opt}", arg is "${OPTARG}", after index is "${OPTIND}    
done

echo "date is "${date}", platform is "${platform}", haveKey is "${haveKey}

测试:

xiaosi@yoona:~$ sh test.sh -d 20170120 -p ios -k --
init index 1
opt is d, arg is 20170120, after index is 3
opt is p, arg is ios, after index is 5
opt is k, arg is , after index is 6
date is 20170120, platform is ios, haveKey is true

原文:https://www.mkssoftware.com/docs/man1/getopts.1.asp

目录
相关文章
|
3月前
|
域名解析 网络协议 安全
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
2月前
|
Python
命令行解析工具 argparse
命令行解析工具 argparse
51 14
|
3月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
56 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
3月前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
80 0
|
3月前
|
存储 Go UED
精通Go语言的命令行参数解析
【8月更文挑战第31天】
47 0
|
3月前
|
存储 Java 测试技术
解析 -XX:+UseCompressedOops JVM 选项
【8月更文挑战第21天】
53 0
|
3月前
|
SQL 分布式计算 算法
【python】python指南(二):命令行参数解析器ArgumentParser
【python】python指南(二):命令行参数解析器ArgumentParser
47 0
|
3月前
|
Go
【go笔记】使用标准库flag解析命令行参数
【go笔记】使用标准库flag解析命令行参数

推荐镜像

更多
下一篇
无影云桌面