首页
学习
活动
专区
圈层
工具
发布

浅谈linux的命令行解析参数之getopt_long函数「建议收藏」

大家好,又见面了,我是你们的朋友全栈君。 前言 在linux中,经常需要各种命令,通常情况下都会带各种参数,而这些参数是如何解析的呢?...通常使用GNU C提供的函数getopt、getopt_long、getopt_long_only函数来解析命令行参数。...二、getopt_long函数 getopt函数只能处理短选项,而getopt_long函数两者都可以,可以说getopt_long已经包含了getopt_long的功能。...因此,这里就只介绍getopt_long函数。而getopt_long与getopt_long_only的区别很小,等介绍完getopt_long,在提起会更好。...(4)如果解析完所有字符没有找到(一般是输入命令参数格式错误,eg: 连斜杠都没有加的选项),返回“-1” (5)如果选项需要参数,忘了添加参数。

2.2K30

getopt 可能重排参数

,另外选项也可以有自己的跟随参数,它们之间是没有顺序的。...当然这只是一个简单的例子,并没有多个参数,也没有多个选项,选项也没有带自己的参数。后面我们会自己做一个复杂的例子,来做验证。 回到 getopt,它的作用就是简化对这些输入的处理。...如何简化呢,就是通过定义一个可接受的选项“模板”,然后通过不停调用 getopt 来将所有选项解析出来, 最后剩下的就是不能被识别的参数了,但是这种场景就简单了,只需按顺序处理它们即可。...最后打印解析不了的参数。 它可以用来验证 getopt 有没有正确的执行: $ ....我一直有个疑问,如果当参数夹杂在选项中时,这个位置是定位到哪里呢? 如果定位到那个参数的位置,那么应用在向后遍历剩余参数时,岂不是会遍历到已经解析的选项? 如果不是,那岂不是漏掉了一个参数?

62130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    执行perl xttdriver.pl报错Cant locate GetoptLong.pm in @INC

    bin/perl xttdriver.pl Can't locate Getopt/Long.pm in @INC (@INC contains: /project/aix5l64/main/APACHE...而在目标环境Linux6.8 + Oracle 11.2.0.4 就正常,起初我没多想这个问题,以为是10g的自带perl版本过低不支持,第一轮测试使用了系统自带perl可执行。...具体依据下面的MOS文档,需要设置PER5LIB环境变量: perl xttdriver.pl fails: Can't locate Getopt/Long.pm in @INC (文档 ID 1912400.1...) 临时设置PERL5LIB环境变量: $ export PERL5LIB=$ORACLE_HOME/perl/lib 再次使用Oracle自带的perl执行xttdriver.pl不再报之前的错误,这里测试没加参数...2018-11-18修正说明:最终发现这个不算是问题,因为实际上源端我使用系统自带的perl也并没有任何报错,实际报错是目标端perl在进行增量恢复时有报错,具体是"Can't locate strict.pm

    1.1K20

    Shell【脚本 04】传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明

    如果一个文件没有shebang行,系统就不知道用哪个解释器来执行它。...getopt的语法比getopts更加复杂,需要指定一个选项字符串,包含了所有支持的选项和参数。getopt将解析后的选项和参数保存在一个数组中,需要在代码中处理这个数组。...getopt命令有以下几个参数:-o:指定单字符选项。选项之间无需分隔符。--long:指定长选项。长选项之间使用逗号分隔。::选项后添加冒号说明当前选项需要参数值。--:分割选项和参数。"...options=$(getopt -o n:a:g:p --long name:,age:,gender:,print -- "$@")会解析命令行选项和参数,并将转换后的选项和参数存储在变量options.../bin/bash# 解析命令行参数options=$(getopt -o n:a:g:p --long name:,age:,gender:,print -- "$@")eval set -- "$options

    78210

    【C】解析命令行参数--getopt和getopt_long

    前言 在程序中一般都会用到命令行选项, 我们可以使用getopt 和getopt_long函数来解析命令行参数 getopt getopt主要用来处理短命令行选项, 例如....: // 输入未定义的选项, 都会将该选项的值变为 ?.../test -a aa -b -c 输出结果如下: option a: aa option b unknown option getopt_long getopt_long支持长选项的命令行解析,...name - 长选项的名称, 例如 help has_arg - 是否带参数, 0 不带参数, 1 必须带参数, 2 参数可选 flag - 指定长选项如何返回结果, 如果flag为NULL, getopt_long..., 即按如下形式--version, 0 表示该选项后面不带参数, NULL 表示直接将v返回(字符v在ascii码中对应的数值), 即在使用getopt_long遍历到该条选项时, getopt_long

    98910

    getopt()、getopt_long()与getopt_long_only()获取命令行参数

    一般情况下,使用getopt_long()来完成命令行选项以及参数的获取。 下面将一一介绍三者的具体用法。...如果字母后跟两个冒号,则表示这个选项的参数是可选的,即可以有参数,也可以没有参数,但要注意有参数时,参数与选项之间不能有空格,否则报错,这一点和一个冒号时是有区别的。...最后,当getopt_long()将命令行所有参数全部解析完成后,返回-1。...,具体参见上面参数的说明; (3)选项参数解析完成后,返回-1; (4)如果遇到存在歧义或未知的选项,则返回’?’。.../a.out --fil 123.txt HAVE option: -f The argument of -f is 123.txt 当输入不完整的命令选项时,同样可以正确的解析,原因是getopt_long

    4.7K71

    python笔记26-命令行传参sys.argv

    命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(—)。 该模块提供了两个方法及一个异常处理(Exception getopt.GetoptError)来解析命令行参数。...getopt.getopt 方法用于解析命令行参数列表,语法格式如下: getopt.getopt(args, options[, long_options]) 参数说明: args: 要解析的命令行参数列表...options: 以列表的格式定义,options后的冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。...long_options: 以字符串的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。...该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有’-‘或’—‘的参数。

    2.2K40

    Shell中使用getopt、getopts命令

    命令的格式 getopt命令可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。...格式如下: getopt optstring parameters optstring是关键所在,它定义命令行有效的选项字母,还定义了那些选项字母需要参数值 getopt命令有一个更高级的版本叫做...定义了四个有效选项字母:a,b,c,d.冒号(:)被放在了字母b后面,因为b选项需要一个参数值,当getopt命令运行时,它会检查提供的参数列表(-a -b test1 -cd test2 test3)...,并给予提供的optstring进行解析,它会自动讲-cd选项分成两个单独的选项,并插入双破折线来分割行中的额外参数。...处理命令行参数是一个相似而又复杂的事情,为此,C提供了getopt/getopt_long等函数, C++的boost提供了Options库,在shell中,处理此事的是getopts和getopt.getopts

    6.1K20

    bashshell 解析命令行参数工具:getoptsgetopt

    ,每个字母代表一个选项,后面带:的意味着选项除了定义本身之外,还会带上一个参数作为选项的值,比如d:在实际的使用中就会对应-d 30,选项的值就是30;getopts字符串中没有跟随:的是开关型选项,不需要再指定值...使用getopts处理参数虽然是方便,但仍然有两个小小的局限: 1.选项参数的格式必须是-d val,而不能是中间没有空格的-dval。...33:22 ~ > 2、外部强大的参数解析工具:getopt 先来看下getopt/getopts的区别 1. getopts是bash内建命令的, 而getopt是外部命令 2. getopts...TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \ -n 'example.bash' -- "$@"` if [ $? !...getopt 对参数顺序进行重排的意义:这样可以将带 "-" 或 "–" 的参数写在其他参数的前面,也可以写在后面,而 getopts 是没有这样的能力的,具体没有的原因就是因为 getopts 直接进入了

    11.5K90

    深入理解getopt

    大家好,又见面了,我是你们的朋友全栈君。...getopt – 解析命令的可选项 【说明】 getopt 只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下: 1、形如:cmd [-a][-b] //对短选项的解析; 2、...传入的’-‘开始的字符被解析为选项,getopt 一次执行解析出一个 option,如果循环执行,可以将 argv 中的全部 option 解析出来; 2、在 getopt 的执行中,每次进入都会更新...,在getopt 执行过程中会将单独的 argument 交换到 argv 数组的后面,option 选项提前,如:cmd -a file1 -b file2,如果 a/b 均为不带参数的选项,这最终...optstring 中指定了 option 需要参数,但在命令行没有参数,那么 getopt 将返回 ‘?’

    1.9K10
    领券