首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Bash :使用getopts解析参数后的选项

基础概念

getopts 是 Bash 脚本中用于解析命令行参数的工具。它可以帮助脚本读取并处理传递给它的选项和参数,使得脚本更加灵活和易于使用。

相关优势

  1. 简化参数处理getopts 自动处理选项的解析,减少了手动编写代码来检查每个参数的复杂性。
  2. 错误处理:当用户提供无效的选项时,getopts 可以生成错误消息并退出脚本。
  3. 支持长选项:虽然 getopts 本身不直接支持长选项(如 --help),但可以通过一些技巧来实现。
  4. 易于扩展:可以轻松地向脚本添加新的选项,只需在 getopts 的调用中添加新的选项字符即可。

类型

getopts 支持以下类型的选项:

  • 短选项:以单个破折号(-)开头的选项,如 -h-v
  • 长选项:以两个破折号(--)开头的选项,如 --help--version

应用场景

getopts 常用于编写需要命令行参数的 Bash 脚本,例如:

  • 配置管理工具
  • 数据备份脚本
  • 系统监控工具

示例代码

以下是一个使用 getopts 解析命令行参数的简单示例:

代码语言:txt
复制
#!/bin/bash

while getopts ":h:v:" opt; do
  case ${opt} in
    h )
      echo "Usage: script.sh [-h] [-v]"
      echo "Options:"
      echo "  -h, --help     Show help"
      echo "  -v, --version  Show version"
      exit 0
      ;;
    v )
      echo "Version: $OPTARG"
      exit 0
      ;;
    \? )
      echo "Invalid option: -$OPTARG" 1>&2
      exit 1
      ;;
    : )
      echo "Invalid option: -$OPTARG requires an argument" 1>&2
      exit 1
      ;;
  esac
done
shift $((OPTIND -1))

echo "Remaining arguments: $@"

遇到的问题及解决方法

问题getopts 报告无效选项错误。

原因:用户提供了脚本不支持的选项。

解决方法

  1. 确保在 getopts 的调用中包含了所有支持的选项字符。
  2. 检查用户输入的选项是否正确,并提供适当的帮助信息。

问题getopts 报告选项需要参数但未提供。

原因:用户提供了需要参数的选项,但没有提供相应的参数值。

解决方法

  1. getopts 的调用中使用冒号(:)来指定哪些选项需要参数。
  2. 在脚本中处理这种情况,例如通过显示错误消息并退出。

参考链接

请注意,上述示例代码和参考链接仅供参考,实际使用时可能需要根据具体需求进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

getopts(1) builtin command

对于一些只需要很简单命令行参数脚本,通过使用N形式轻松完成解析,但对于比较复杂命令行形式参数,就需要脚本编写者在脚本中加入复杂代码对命令行入参进行解析。...getopts 语法相对简单,不支持长选项(以 -- 开头选项,如--help)。如果遇到非选项(非 -开头)参数就终止解析,后面的选项参数将不会被解析。...在 Shell 脚本中使用时,默认解析是执行 Shell 脚本传入参数,所以这个部分可省略不写。 3.选项 无。 4.返回值 如果找到指定或未指定选项getopts 将返回 true。...如果遇到选项结束或发生错误,则返回 false。 5.特殊变量 getopts 使用涉及一些特殊变量。 OPTARG OPTARG 存储当前选项参数值。...6.示例 使用 getopts,编写一个 Shell 脚本,可支持识别命令行选项 -b、-o、-h。其中,-b 和 -o 选项需要跟一个参数。 #!

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

    ,比如 rsync、wget 等动辄几十上百参数选项,那就必须用专业工具来处理了,在 bash/shell 中我们一般用:getopts/getopt  1、bash 内置 getopts:...使用getopts处理参数虽然是方便,但仍然有两个小小局限: 1.选项参数格式必须是-d val,而不能是中间没有空格-dval。...在使用getopt时候, 每处理完一个位置参数都需要自己shift来跳到下一个位置, getopts只需要在最后使用shift $(($OPTIND - 1))来跳到parameter位置。...5. getopt往往需要跟set配合使用 6. getopt -o选项注意一下 7. getopts 使用语法简单,getopt 使用语法较复杂 8. getopts 不会重排所有参数顺序...# mkdir -f #不成功,因为-f会被mkdir当作选项解析,这时就可以使用 # mkdir -- -f 这样-f就不会被作为选项

    11K90

    Linux:中使用getopts处理脚本参数

    本文将详细讲解如何在Linux脚本中使用getopts来处理脚本参数,并通过示例来展示其实际应用。 一、getopts概述 getopts是一种用于解析命令行参数工具。...optstring:指定选项字符,如果选项后面跟随参数,则在该字符加上冒号:。 name:变量名,用于存储当前处理选项。 args:要解析参数列表,通常为脚本参数$@。...三、使用步骤 定义选项字符串: 确定脚本所需选项。 如果选项需要参数,则在该选项字符加上:。 调用getopts: 在while循环中调用getopts,逐个处理选项。...解析命令行选项使用while getopts "ab:c" opt; do循环解析选项。 opt是当前处理选项,OPTARG是当前选项参数值。...c):如果选项是-c,将c_flag设置为1。 \?):处理非法选项,输出错误信息并退出。 :):处理缺少参数选项,输出错误信息并退出。 打印解析结果: 解析完成,打印选项状态和参数值。

    36210

    Shell中使用getopt、getopts命令

    ,并给予提供optstring进行解析,它会自动讲-cd选项分成两个单独选项,并插入双破折线来分割行中额外参数。...在脚本中使用getopt set命令选项之一是双破折线(–),它会将命令行参数替换成shell中各种变量 #/bin/bash ################################...3.使用更高级getopts getopts格式如下: getopts optstring variables 使用getopts例子如下: [root@log example]#cat...应该说绝大多数脚本使用该函数就可以了,如果需要支持长选项以及可选参数,那么就需要使用getopt. 下面是getopt自带一个例子: #!...# mkdir -f #不成功,因为-f会被mkdir当作选项解析,这时就可以使用 # mkdir -- -f 这样-f就不会被作为选项

    5.6K20

    Shell脚本中while getopts用法小结

    getpots是Shell命令行参数解析工具,旨在从Shell Script命令行当中解析参数。...这个时候我们就可以使用bash内置getopts工具了,用于解析shell脚本中参数!...,用来识别非法选项,进行相应操作,我们脚本中输出了帮助信息。 3)getopts示例二:当选项参数识别完成以后,就能识别剩余参数了,我们可以使用shift进行位移,抹去选项参数。...当选项参数处理结束,其指向剩余参数第一个。getopts在处理参数时,处理带值选项参数,OPTIND加2;处理开关型变量时,OPTIND则加1。...解析时ab参数在一起,-a和-b都跟参数时,-a在前面执行,-b参数就不会执行了。

    8.9K74

    Shell脚本参数选项

    位置参数是Shell脚本中特殊变量,用于表示脚本执行时传递参数。命名参数是通过选项来传递参数,可以使用getopts命令来解析。...选项通常是单个字母,可以使用getopts命令来解析getopts命令可以读取一个选项并将其存储在特殊变量$OPTARG中,可以使用case语句来处理不同选项。例如:#!...Shell脚本参数选项时,需要注意以下几点:1.传递参数时,使用空格分隔不同参数。...2.在使用位置参数时,可以使用特殊变量$#来获取传递参数数量。3.在使用命名参数时,可以使用默认值来处理未指定选项。4.在处理多个选项时,可以使用循环结构来读取和处理选项。...5.在使用选项时,需要注意选项大小写。通常情况下,选项都是大小写敏感,因此需要使用正确选项名称。6.在使用命名参数时,可以使用选项来提高可读性。

    2.2K21

    《Linux命令行与shell脚本编程大全》第十四章 处理用户输入

    有时还会需要脚本能够与使用者交互。bash shell提供了一些不同方法来从用户处获得数据, 包括命令行参数,命令行选项,以及直接从键盘读取输入能力。...14.4.2 使用getopt命令 它能够识别命令行参数,从而在脚本中解析它们。 1.命令格式 可以接受一系列任意形式命令行选项参数,并自动将它们转换成命令行参数。...方法是:用getopt命令生成格式化版本来替换已有的命令行参数选项。 用set命令可以做到。需要选项之一就是 双破折号 --。它会将命令行参数替换成set命令命令行值。...使用更高级getopts getopt将命令行上选项参数处理结只生成一个输出。 getopts能够和已有的shell参数变量配合默契。 每次调用它时,它一次只处理命令行上检测到一个参数。...getopts会用到两个环境变量: OPTARG:会保存一个参数值 OPTIND:保存参数列表中getopts正在处理参数位置。 getopts知道何时停止处理选项,并且把参数留给你处理。

    1.8K50

    Shell 脚本参数解析工具

    Argbash是一个代码生成器,它为你脚本生成一个量身定制解析库。与其他bash模块通用代码不同,它生成你脚本所需最少代码。...此外,如果你不需要100%符合那些CLI标准的话,你可以生成更简单代码。 Shell脚本参数解析工具 1. 使用空格分隔 使用空格作为参数分隔 实际用法 ....使用 getopts 工具 使用第三方工具进行参数解析 实际用法 ./myscript.sh -h ./myscript.sh -v -f 实现脚本 #!...缺点就是它只能处理短选项,如-h,而不能是--help格式 while getopts "h?...使用 argbash 工具 动态参数解析工具 这个工具主要提供脚本参数解析功能,而且不再引用任何第三方库情况下。就我使用而言,一般会比普通脚本多30多行而且,但是效果非常好。

    1.8K30

    工作任务项杂记_201904

    ,是很有必要加入必要注释、输入参数解析、脚本使用说明、定义主函数及各分支函数。...建议使用Linux风格输入参数风格解析,可以使用bash内置命令getopts和外部命令getopt,这两种方法使用方法可参考shell脚本之shift和getopts、shell中getopt...脚本使用说明可使用usage函数完成,如下: usage() { echo "bla bla bla ..." } # 解析参数时,当发现-h或--help参数,立即执行usage...,输出脚本使用说明 -h|--help) usage ;; 为了避免bash脚本成为流水帐,建议整个脚本按以下函数组织 # 解析参数 parse_args() { ....前端拿到swagger API文档,可使用swagger-editor轻松生成nodejs-server版server stub,在此基础上即可开发简易mock server了,这样前端开发即可不再依赖后端了

    55320

    Linux Shell编程零基础入门

    在本文中,我们关注重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认Shell。...exit 1;; esac done 上面的getopts类似于C语言提供函数getopts,在Shell Script中,getopts经常和while语句联合起来使用。...getopts语法如下: getopts option_string variable option_string中包含一串单字符选项,若getopts在命令行参数中 发现了连字符,那么它会将连字符之后字符与...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 ,会读取该值,然后将该值放入特殊变量OPTARG中。...x filename.sh 这会执行脚本并显示脚本中所有变量取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    1.2K10

    getopt getopts

    一.getopt 1.使用 getopt optstring options parameters optstring定义了命令行有效选项字母,还定义了哪些选项字需要参数,需要参数选项后面加:即可;...: 定义了4个有效选项,还指定b需要参数值,它会自动将-cd选项分成两个单独选项,并插入双破折号来分开行中额外参数; 二.getopts 1.使用 getopts optstrings variable...每次调用它时,它只处理一个命令行上检测到参数,处理完所有参数,它会退出并返回一个大于0退出状态码。...,OPTARG:保存选项参数值,OPTIND:保存了参数列表中正在处理参数位置; getopts命令解析选项时,会移除开头-(单破折号); 选项参数值连在一起时,getopts也能分别识别它们...,所以使用选项参数直接可以不用加空格; getopts能将命令行上未定义选项统一输出成问号。

    45010

    Bash概论 - Linux系列教程补充篇

    #: 行注释 $: 变量表达式,变量解析&: 在后台执行命令,在for循环中也可用作命令分割符,取代done前面的; Bash变量 1....字符串I/O操作 字符串输出: echo 命令选项: -e: 启动转义序列 -n: 取消输出换行 (前面已经用到过) 3....有两个参数, 第一个为字母和冒号组成选项列表字符串, 第二个为一个变量名 选项列表字符串以冒号开头选项字母排列组成, 如果一选项需要一个参数则该选项字母后跟一个冒号 getopts分解第一参数,...依次将选项摘取出来赋给第二个参数变量 如果某选项参数, 则读取参数到内置变量OPTARG中 内置变量OPTIND保存着将被处理命令行参数(位置参数数值选项列表处理完毕getopts返回1, 否则返回...0 如: 在我们推出一步绘图脚本里面,就是使用Bash封装R脚本,通过修改命令行参数,完成热图、柱状图、线图、Venn图、火山图、泡泡图等图形绘制和定制。

    1.2K70

    Linux Shell编程入门

    exit 1;; esac done 上面的getopts类似于C语言提供函数getopts,在Shell Script中,getopts经常和while语句联合起来使用。...getopts语法如下: getopts option_string variable option_string中包含一串单字符选项,若getopts在命令行参数中 发现了连字符,那么它会将连字符之后字符与...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 ,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单方法就是用echo输出查看变量取值了。Bash也提供了真正调试方法,就是执行脚本时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    1.2K10

    shell编程:编程就是这么简单

    ,可以使用getopts函数,该函数可以将命令行内容转换为变量。...getopts包含两个内置变量,OPTARG和OPTIND。OPTARG就是将选项后面的参数保存在这个变量当中;OPTIND:这个表示命令行下一个选项参数位置。...语法格式:getopts[option[:]] VARIABLE getopts有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效选项,如果字符后面带有“:”,表示这个字符有自己参数...,$*中就只保留了除去选项内容参数,可以继续使用后面的位置参数。...参数;两个冒号就表示这个选项参数是可选,即可以有参数,也可以没有参数,但要注意有参数时,参数选项之间不能有空格。

    83140

    getopt(1) command

    1.简介 getopt 是一个广泛使用命令行工具,用于解析复杂命令行选项。它提供了一种标准化方式来处理短选项和长选项,以及选项参数,使得编写和维护命令行工具变得更加容易。...注意,与 getopt 类似的一个命令 getopts 是 Shell 内建命令,其功能没有 getopt 强大,只支持短选项,不能解析选项。...如果没有给出-s选项,则使用BASH约定。目前有效参数是 sh,bash,csh 和 tcsh。 -T, --test: 测试您 getopt(1) 是这个增强版本还是旧版本。...“$OPTIONS” 这是 getopt 命令解析输出,包含了重新排列选项参数。...set -- 设置位置参数,使得脚本可以使用标准 1, 2, … 来访问命令行参数。 (2)带长选项解析。 #!

    8410

    argparse------用于命令行选项参数和子命令解析

    这将创建一个可选参数,后面可以跟着零个或一个命令行参数。在解析命令行时,如果遇到选项字符串后面没有命令行参数,那么将使用const值。有关示例,请参见nargs描述。...description - 帮助输出中解析器组描述,默认情况下为None。 prog - 使用子命令帮助将显示使用信息,默认情况下程序名称和子解析参数之前任何位置参数。...>> args = parser.parse_args('bar XYZYX'.split())>>> args.func(args)((XYZYX))通过这种方式,您可以让parse_args()在参数解析完成调用适当函数...解析器可能会使用一个选项,即使它只是它一个已知选项前缀,而不是将它留在剩余arguments列表中。...这些解析器不支持所有argparse特性,如果使用不支持特性,就会引发异常。特别是子解析器argparse。不支持同时包含选项和位置剩余组和互斥组。

    7K20

    统计文件夹下某类文件大小小脚本

    hexo 生成静态文件主要有两类,一类是 markdown 转换 html 文件,另一大块主要是 文章中引用图片。...,因为写这个脚本查阅了一些资料,主流方案是使用下面两个命令: getopts 是 Linux 系统中一个内置变量,一般通过循环方式使用,每次循环 getopts 都会检查命令行选项,并将命令行选项值爆存在...OPTARG 变量中 getopt 是一个外部命令,相较于 getopts 命令能够支持长参数,但是使用起来较 getopts 复杂 本文中因为参数比较少且没计划使用参数,因此采用了 getopts...来处理选项参数问题。...给你shell脚本写一个--help文档 编写可接受选项参数shell脚本 getopts 使用

    1.3K20

    Linux Shell编程入门

    在本文中,我们关注重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认Shell。...exit 1;; esac done 上面的getopts类似于C语言提供函数getopts,在Shell Script中,getopts经常和while语句联合起来使用。...getopts语法如下: getopts option_string variable option_string中包含一串单字符选项,若getopts在命令行参数中 发现了连字符,那么它会将连字符之后字符与...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 ,会读取该值,然后将该值放入特殊变量OPTARG中。...x filename.sh 这会执行脚本并显示脚本中所有变量取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    3.8K20
    领券