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

在bash shell脚本中使用getopts来获取长和短的命令行选项

在bash shell脚本中,getopts 是一个内置命令,用于处理长短选项。它允许用户在命令行中输入参数,并在脚本内部处理这些参数。getopts 可以处理短选项(单个字符)和长选项(多个字符)。

getopts 的基本语法如下:

代码语言:bash
复制
getopts optstring name

其中,optstring 是一个包含所有可用选项的字符串,每个选项前面可以加上冒号(:)表示该选项需要参数。name 是一个变量名,用于存储当前处理的选项。

在使用 getopts 时,需要遵循以下步骤:

  1. 在脚本开头,使用 while 循环和 getopts 命令处理选项。
  2. 在循环内部,使用 case 语句处理不同的选项。
  3. 使用 shift $((OPTIND-1) 命令将非选项参数移到参数列表的开头。

以下是一个简单的示例脚本,演示如何使用 getopts 处理长短选项:

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

while getopts ":vh-:" opt; do
  case $opt in
    -) # 长选项
      case $OPTARG in
        verbose)
          verbose=1
          ;;
        help)
          help=1
          ;;
        *)
          echo "Invalid option: --$OPTARG" >&2
          exit 1
          ;;
      esac
      ;;
    v) # 短选项
      verbose=1
      ;;
    h) # 短选项
      help=1
      ;;
    \?) # 无效选项
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :) # 缺少参数
      echo "Option -$OPTARG requires an argument" >&2
      exit 1
      ;;
  esac
done

shift $((OPTIND-1))

# 处理非选项参数
non_option_args=("$@")

if [ -n "$help" ]; then
  echo "Usage: $0 [-v] [--verbose] [--help]"
  exit 0
fi

if [ -n "$verbose" ]; then
  echo "Verbose mode enabled"
fi

echo "Non-option arguments: ${non_option_args[@]}"

在这个示例中,我们使用 getopts 处理了长选项 --verbose--help,以及短选项 -v-h。如果用户提供了无效的选项或缺少参数,脚本将输出错误信息并退出。最后,我们将非选项参数存储在数组 non_option_args 中,并在脚本末尾输出它们。

推荐的腾讯云相关产品和产品介绍链接地址:

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

相关·内容

Shell使用getopt、getopts命令

,并给予提供optstring进行解析,它会自动讲-cd选项分成两个单独选项,并插入双破折线分割行额外参数。...脚本使用getopt set命令选项之一是双破折线(–),它会将命令行参数替换成shell各种变量 #/bin/bash ################################...boost提供了Options库,shell,处理此事getoptsgetopt.getoptsgetopt功能相似但又不完全相同,其中getopt是独立可执行文件,而getopts是由.../test.sh -a arg -bc 加载了。 应该说绝大多数脚本使用该函数就可以了,如果需要支持选项以及可选参数,那么就需要使用getopt..../test -a -b arg arg1 -c 你可以看到,命令行多了个arg1参数,经过getoptset之后,命令行会变为: -a -b arg -c – arg1 1

5.5K20

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

bash 脚本,简单点参数选项,我们可以直接用位置参数 $1 $2 这样获取处理了,例如下面这段代码片段: optionParam=$1 baseHdfsPath=$2 echo $optionParam...,比如 rsync、wget 等动辄几十上百参数选项,那就必须用专业工具来处理了, bash/shell 我们一般用:getopts/getopt  1、bash 内置 getopts:...如果命令行包含了没有getopts列表选项,会有警告信息,如果在整个getopts字符串前面也加上个:,就能消除警告信息了。...使用getopt时, 命令行输入位置参数是什么, getopt需要保持原样, 比如 -t , getoptcase语句中也要使用-t,  而getopts不要前面的-。.../test -a  -b arg arg1 -c  你可以看到,命令行多了个arg1参数,经过getoptset之后,命令行会变为: -a -b arg -c -- arg1 $1指向-a,

10.9K90

getopts(1) builtin command

Shell 脚本可以通过1...N形式符号引用传入参数,0表示当前脚本名称。1~N 传入参数位置相对应,比如1表示执行脚本时传入第一个参数,2表示传入第二个参数,以此类推引用其他参数。...对于一些只需要很简单命令行参数脚本,通过使用N形式轻松完成解析,但对于比较复杂命令行形式参数,就需要脚本编写者脚本中加入复杂代码对命令行入参进行解析。...为了减少重复性编程简化命令行参数处理过程,Shell脚本编写者提供了一些命令行处理方法,使用这些方法可以轻松处理各种形式命令行参数。 常用getopts getopt。... Shell 脚本使用时,默认解析是执行 Shell 脚本传入参数,所以这个部分可省略不写。 3.选项 无。 4.返回值 如果找到指定或未指定选项getopts 将返回 true。...6.示例 使用 getopts,编写一个 Shell 脚本,可支持识别命令行选项 -b、-o、-h。其中,-b -o 选项后需要跟一个参数。 #!

12810

Shell脚本参数选项

本文将详细介绍Shell脚本参数选项,包括基本语法、使用方法示例。一、基本语法Shell脚本支持两种类型参数,分别是位置参数命名参数。...位置参数是Shell脚本特殊变量,用于表示脚本执行时传递参数。命名参数是通过选项传递参数,可以使用getopts命令解析。...is: arg32.命名参数Shell脚本,命名参数通常使用选项传递。...2.使用位置参数时,可以使用特殊变量$#获取传递参数数量。3.使用命名参数时,可以使用默认值来处理未指定选项。4.处理多个选项时,可以使用循环结构读取处理选项。...,可以使用选项选项传递参数,例如:$ .

2K21

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

Linux编写Shell脚本时,处理命令行参数是一个常见且重要任务。getopts是一个用于解析命令行选项内置命令,它能够帮助我们简化脚本参数处理过程。...本文将详细讲解如何在Linux脚本使用getopts来处理脚本参数,并通过示例展示其实际应用。 一、getopts概述 getopts是一种用于解析命令行参数工具。...与getopt不同是,getoptsShell内建命令,不需要额外安装。getopts可以处理短选项(如-a)带参数选项(如-b value),但不支持选项(如--help)。...三、使用步骤 定义选项字符串: 确定脚本所需选项。 如果选项需要参数,则在该选项字符后加上:。 调用getoptswhile循环中调用getopts,逐个处理选项。...六、总结 通过getopts,我们可以简化Shell脚本命令行参数处理过程。使用getopts不仅可以使代码更清晰,还能自动处理错误情况,提高脚本健壮性。

16510

getopt(1) command

1.简介 getopt 是一个广泛使用命令行工具,用于解析复杂命令行选项。它提供了一种标准化方式来处理短选项选项,以及选项参数,使得编写维护命令行工具变得更加容易。...注意,与 getopt 类似的一个命令 getoptsShell 内建命令,其功能没有 getopt 强大,只支持选项,不能解析选项。...如果没有给出-s选项,则使用BASH约定。目前有效参数是 sh,bash,csh tcsh。 -T, --test: 测试您 getopt(1) 是这个增强版本还是旧版本。...– 双破折号 – 是一个特殊标记,用于告诉 set 命令后面的参数是位置参数,而不是选项。这个标记也用于命令行中分隔选项位置参数。...set -- 设置位置参数,使得脚本可以使用标准 1, 2, … 来访问命令行参数。 (2)带选项解析。 #!

7810

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

Q:什么是shell编程? A:shell编程就是通过语法将bash命令或外部命令整合起来,搭配正则表达式、管道命令与数据流定向等功能,实现我们要完成任务。...shell脚本命令行参数可以直接加在脚本后面,脚本使用默认变量“$n”调用(n为非负整数),下面通过一个小例子来了解shell脚本命令行参数使用方法: echo $0 echo $1 echo...sh05.sh,运行如下所示: 假如想设置命令行选项,可以使用getopts函数,该函数可以将命令行内容转换为变量。...getopts包含两个内置变量,OPTARGOPTIND。OPTARG就是将选项后面的参数保存在这个变量当中;OPTIND:这个表示命令行下一个选项或参数位置。...getopts从命令获取这些参数,并且删去了“-”,并将其赋值第二个参数,如果带有自己参数,这个参数赋值“OPTARG”

81940

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

有时还会需要脚本能够与使用者交互。bash shell提供了一些不同方法从用户处获得数据, 包括命令行参数,命令行选项,以及直接从键盘读取输入能力。...这样就可以添加任意多参数了。 14.1.2 读取脚本名 $0 参数获取shell命令行启动脚本名。 也就是说 同一个脚本test。 ....分离参数选项 如果需要在shell脚本同时使用选项参数。 解决方案是用特殊字符将二者分开。 shell会用双破折线表明选项列表结束。双破破折现之后脚本就可以放心将剩下命令当做参数了。...image.png 2.脚本使用getopt 可以脚本使用getopt格式化脚本所携带任何命令行选项或者参数,用起来略繁琐。...使用更高级getopts getopt将命令行选项参数处理结后只生成一个输出。 getopts能够已有的shell参数变量配合默契。 每次调用它时,它一次只处理命令行上检测到一个参数。

1.7K50

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

/bin/bash # 统计一个目录下指定类型或限制某种类型以外文件大小,包括子目录 help() { echo "Description: 用于查找某个目录下特定类型文件数量大小,...,因为写这个脚本查阅了一些资料,主流方案是使用下面两个命令: getopts 是 Linux 系统一个内置变量,一般通过循环方式使用,每次循环 getopts 都会检查命令行选项,并将命令行选项值爆存在...OPTARG 变量 getopt 是一个外部命令,相较于 getopts 命令能够支持参数,但是使用起来较 getopts 复杂 本文中因为参数比较少且没计划使用参数,因此采用了 getopts...来处理选项参数问题。...给你shell脚本写一个--help文档 编写可接受选项参数shell脚本 getopts 使用

1.3K20

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

; do j=${i/_1.fq.gz/}; echo "$j"; done Shell条件test命令 Bash可以使用[ … ]结构或test命令测试复杂条件格式: [ expression ]...() { function body}定义函数,函数参数获取命令行参数获取。...命令行处理命令 getopts 有两个参数, 第一个为字母冒号组成选项列表字符串, 第二个为一个变量名 选项列表字符串以冒号开头选项字母排列组成, 如果一选项需要一个参数则该选项字母后跟一个冒号...getopts分解第一参数, 依次将选项摘取出来赋给第二个参数变量 如果某选项有参数, 则读取参数到内置变量OPTARG 内置变量OPTIND保存着将被处理命令行参数(位置参数)数值选项列表处理完毕...getopts返回1, 否则返回0 如: 我们推出一步绘图脚本里面,就是使用Bash封装R脚本,通过修改命令行参数,完成热图、柱状图、线图、Venn图、火山图、泡泡图等图形绘制定制。

1.2K70

Shell脚本while getopts用法小结

示例说明: 1)shell脚本,对于简单参数,常常会使用$1,$2,......这个时候我们就可以使用bash内置getopts工具了,用于解析shell脚本参数!...操作,有两个"常量",一个是OPTARG,用来获取当前选项值;另外一个就是OPTIND,表示当前选项参数列表位移。case最后一项是?...,用来识别非法选项,进行相应操作,我们脚本输出了帮助信息。 3)getopts示例二:当选项参数识别完成以后,就能识别剩余参数了,我们可以使用shift进行位移,抹去选项参数。...shift参数使用 很多脚本执行时候我们并不知道后面参数个数,但可以使用$*获取所有参数。但在程序处理过程中有时需要逐个将$1、$2、$3……$n进行处理。

8.6K74

Linux Shell编程零基础入门

本文中,我们关注重点是Bash,也就是Bourne Again Shell,由于易用免费,Bash日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认Shell。...方括号两侧都有空格,-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本时候就会出错。 $#表示包括$0在内命令行参数个数。...Shell脚本可以使用所有的Linux命令,利用上面的catexit,从一方面来说,熟练使用Linux命令也可以大大减少Shell脚本长度。...exit 1;; esac done 上面的getopts类似于C语言提供函数getoptsShell Scriptgetopts经常while语句联合起来使用。...getopts语法如下: getopts option_string variable option_string包含一串单字符选项,若getopts命令行参数 发现了连字符,那么它会将连字符之后字符与

1.2K10

是不是傻傻分不清楚Unix Linux?看了这个就知道了

本文中,我将列出一些比较明显差异。 1. Bash不是标准shell 所有Unix系统上默认shell都是sh,而不是bash。POSIX标准中介绍了sh中使用语言。...然而,许多Linux系统上,sh只是指向bash链接,这样可以用更接近标准方式来使用bash,但人们依然可以使用一些无法在其他系统上使用bash功能。如有疑问,请参阅标准。 2....Unix不包含选项 Unix命令选项有两种写法:选项(只有一条短线-)与选项(有两条短线--)。选项一般会采用缩写形式,而选项一般会写出完整单词。...许多工具程序都接受选项,例如grep --count,对应选项是grep -c。前者是GNU写法,其他系统通常不会采用这种写法,例如BSD。...事实上,标准getopts工具程序相应getopt C函数只支持选项。 3. Make不同于GNU make POSIX版本make比GNU版本更有局限性。

38460

Linux Shell编程入门

方括号两侧都有空格,-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本时候就会出错。 $#表示包括$0在内命令行参数个数。...Shell脚本可以使用所有的Linux命令,利用上面的catexit,从一方面来说,熟练使用Linux命令也可以大大减少Shell脚本长度。...exit 1;; esac done 上面的getopts类似于C语言提供函数getoptsShell Scriptgetopts经常while语句联合起来使用。...getopts语法如下: getopts option_string variable option_string包含一串单字符选项,若getopts命令行参数 发现了连字符,那么它会将连字符之后字符与...第四,我们也可以Shell下调试Shell Script脚本,当然最简单方法就是用echo输出查看变量取值了。Bash也提供了真正调试方法,就是执行脚本时候用-x参数。 sh ?

1.2K10

Linux Shell编程入门

本文中,我们关注重点是Bash,也就是Bourne Again Shell,由于易用免费,Bash日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认Shell。...方括号两侧都有空格,-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本时候就会出错。 $#表示包括$0在内命令行参数个数。...Shell脚本可以使用所有的Linux命令,利用上面的catexit,从一方面来说,熟练使用Linux命令也可以大大减少Shell脚本长度。...exit 1;; esac done 上面的getopts类似于C语言提供函数getoptsShell Scriptgetopts经常while语句联合起来使用。...getopts语法如下: getopts option_string variable option_string包含一串单字符选项,若getopts命令行参数 发现了连字符,那么它会将连字符之后字符与

1.4K20

Linux Shell编程入门

本文中,我们关注重点是Bash,也就是Bourne Again Shell,由于易用免费,Bash日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认Shell。...方括号两侧都有空格,-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本时候就会出错。 $#表示包括$0在内命令行参数个数。...Shell脚本可以使用所有的Linux命令,利用上面的catexit,从一方面来说,熟练使用Linux命令也可以大大减少Shell脚本长度。...exit 1;; esac done 上面的getopts类似于C语言提供函数getoptsShell Scriptgetopts经常while语句联合起来使用。...getopts语法如下: getopts option_string variable option_string包含一串单字符选项,若getopts命令行参数 发现了连字符,那么它会将连字符之后字符与

3.8K20

Linux学习笔记(四)

)特性存储有关shell会话工作环境信息。...交互式shell不会像登录shell一样运行,但它依然提供了命令行提示符输入命令。 通俗来说,就是终端,shell等待用户输入,然后执行用户输入命令。...) OPTARG getopts命令处理最后一个选项参数值 OPTIND getopts命令处理最后一个选项参数索引号 PATH shell查找命令目录列表,由冒号分隔 PS1 shell命令行界面的主提示符...使用bash -c选项传递过来命令 BASH_LINENO 含有当前执行shell函数源代码行号数组变量 BASH_REMATCH 只读数组,使用正则表达式比较运算符=~进行肯定匹配(positive...被删除目录名会用一组英文句点替换 PS3 select命令提示符 PS4 如果使用bash一x选项命令行之前显示提示信息 PWD 当前工作目录 RANDOM 返回一个0~ 32767随机数

1.1K10

BashShell变量

简介 Bash Shell 使用「环境变量」存储有关 Shell 会话工作环境信息。...var} 3.5 删除环境变量 Bash Shell 使用 unset 命令删除环境变量。 unset var 修改全局变量类似,子进程删除全局变量也无法反映到父进程。...会检查列表每个文件,看看有没有新邮件) OPTARG getopts 命令处理最后一个选项参数值 OPTIND getopts 命令处理最后一个选项参数索引号 PATH Shell 查找命令目录列表...被删除目录名会用一组英文句点替换 PS3 select 命令提示符 PS4 如果使用bash -x 选项命令行之前显示提示信息 PWD 当前工作目录 RANDOM 返回一个 0~32767...Bash Shell 选项标志是启动时或以内建命令 set 指定,或者是 shell 自身设置(例如选项 -i)。

2.4K30

Linux: Shell脚本实现支持选项参数

Linux Shell脚本选项有时不够用或者不够直观。选项(如--help、--version)则更加直观且易于理解。本文将详细讲解如何在Shell脚本实现支持选项参数功能。...二、实现思路 为了Shell脚本中支持选项,我们可以使用两种主要方法: 使用getopt命令:getopt是一个外部命令,可以解析选项选项。.../bin/bash # 定义选项选项 SHORT_OPTS="hv" LONG_OPTS="help,version,input:,output:" # 解析命令行选项 PARSED_OPTS...Shell脚本实现支持选项参数两种方法。...使用getopt命令可以方便地解析选项选项,而手动解析则更加灵活。通过这两种方法,可以使脚本选项更加直观和易用,从而提高脚本可读性用户体验。

22710
领券