Linux 命令速查
Shell内建 man getopts

getopts

Shell 内建的命令行选项解析器

返回

补充说明

getopts 是 POSIX 规定的 shell 内建命令,用来在脚本中解析以 - 开头的短选项(如 -a -b value)。它由 bash、dash、ksh 等 shell 直接实现,不依赖外部程序,因此脚本可移植性很好。

工作方式:每次调用从参数列表中取出一个选项,把选项字符存入指定变量,把该选项的参数存入 OPTARG,并用 OPTIND 记录下一个待处理参数的位置。选项串中字符后跟冒号表示该选项需要参数(如 "ab:c"),开头加冒号则让错误信息由脚本自行处理。

getopts 不处理长选项(--verbose 之类)。需要长选项、选项重排或子命令时,通常改用 GNU getopt 命令,或直接手写 case 循环。

语法

getopts 选项串 变量名 [参数...]

说明

  • OPTARG:当前选项的参数值
  • OPTIND:下一个待处理的参数下标,解析结束后可用 shift $((OPTIND-1)) 处理剩余位置参数
  • 选项串以 : 开头时进入静默模式:非法选项把变量置为 ?,缺参数置为 :,并设置 OPTARG
  • 解析结束时返回非 0,循环退出

实例

#!/bin/bash
# 解析 -v 开关与 -f 文件名、-n 数字
verbose=0
file=""
count=1

while getopts ":vf:n:" opt; do
  case "$opt" in
    v) verbose=1 ;;
    f) file="$OPTARG" ;;
    n) count="$OPTARG" ;;
    :) echo "选项 -$OPTARG 需要一个参数" >&2; exit 1 ;;
    \?) echo "未知选项: -$OPTARG" >&2; exit 1 ;;
  esac
done

# 去掉已解析的选项,剩下的才是位置参数
shift $((OPTIND - 1))

echo "verbose=$verbose file=$file count=$count args=$*"
# 保存并运行后测试
./script.sh -v -f data.txt -n 3 extra1 extra2

参考链接