首页
学习
活动
专区
工具
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.3K20

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.8K90

Shell脚本参数选项

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

1.7K21

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

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

78540

《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.2K20

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.3K74

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版本更有局限性。

33260

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

Shell 进阶指南

- 基于终端 bash 命令搜索引擎 byobu - 基于文本窗口管理器及终端多路复用器 commacd - Bash 更快速移动方式 desk - 适用于 shell 轻量级工作区管理器...bocker - 使用百行 bash 实现 Docker cloc - 统计代码行数 dokku - 百行 Bash 打造 Docker 迷你 Heroku getopts - 适用于 fish 命令行解析器...磁盘占用统计 powertop - 电池/电源占用及设备状态监视命令行工具,包含调整选项 procdog - 轻量级命令行控制类似服务器实时进程 quick-secure - 快速安全并加固 UNIX...shell 函数 dispatch - 使用 50 行可移植 shell 脚本写成命令行参数解析器 is.sh - 内置 test 命令替代品,使 “if” 语句更漂亮 mo - 使用Bash...实现 Mustache 模板 optparse - 针对 getopts BASH wrapper,用于简单命令行参数 rerun - 用来管理保留脚本模块化 shell 自动化框架 semver_bash

2.7K71

Awesome-Shell资源

作为后端) commacd - Bash 更快速移动方式 desk - 适用于 shell 轻量级工作区管理器 direnv - 针对 shell 环境切换工具(利用 autoenv...- NCurses 磁盘占用统计 powertop - 电池/电源占用及设备状态监视命令行工具,包含调整选项 procdog - 轻量级命令行控制类似服务器实时进程 quick-secure...使用Bash 实现 Mustache 模板 optparse - 针对 getopts BASH wrapper,用于简单命令行参数 rerun - 用来管理保留脚本模块化 shell...自动化框架 semver_bash - 使用 Bash 实现语义化版本 sh-semver - 适用于 bash Semver 工具,匹配指定规则查找版本 shellcheck - 针对... Shell 风格指南 Linux 文档项目: Bash 编程 - 简介/如何做 Linux 文档项目: 高级 Bash 脚本指南 WikiBooks: Bash Shell 脚本 使用非官方 Bash

1.9K00

第三十三章 : 位置参数

现在我们程序还缺少一种本领,就是接收处理命令行选项参数能力。在这一章,我们将探究一些能让程序访问命令行内容 shell 性能。...通过此功能,我们可以写出许多有用 shell 函数,这些函数不仅能在脚本使用,也可以用在 .bashrc 文件。...循环体内,我们使用了一个 case 语句检查当前位置参数值,看看它是否匹配某个支持选项。若找到了匹配项,就会执行与之对应代码。若没有,就会打印出程序使用信息,该脚本终止且执行错误。...伴随着位置参数加入,现在我们能编写相当具有功能性脚本。例如,重复性任务,位置参数使得我们可以编写非常有用,可以放置一个用户 .bashrc 文件 shell 函数。...: 除了本章讨论技术之外,bash 还包含一个叫做 getopts 内部命令,此命令也可以用来处理命令行参数。

92710
领券