linux shell 脚本 之 getopt

1、getopt是什么

   getopt是一个用于解析命令行选项的工具,常用于编写需要处理多个命令行参数的脚本。它支持短选项(如 -v)和长选项(如 --version),并能处理带有参数的选项。getopt是 GNU 库中的一个标准工具,大多数 Unix 和 Linux 系统上都提供了它的实现。

2、getopt的基本用法

典型的 getopt使用方式如下:

getopt [options] optstring parameters
  • options: 控制 getopt 的行为的选项,比如是否允许长选项、是否静默模式等。
  • optstring: 指定脚本可以接受的短选项。
  • parameters: 需要解析的命令行参数,通常传递为 "$@"

3、getopt的选项

常用选项包括:

  • -o--options: 指定短选项字符串,例如 -o v:b:c:。每个字符表示一个短选项,如果字符后有冒号 :,则表示该选项需要一个参数。

  • -l--longoptions: 指定长选项列表,用逗号分隔。例如 --longoptions version,help,output:

  • -q--quiet: 静默模式,不显示错误信息。

  • -n--name: 设置 getopt 生成的错误信息中的脚本名称(默认为脚本名称)。

  • -u: 忽略 getopt 自己的错误信息输出。

  • --: 结束选项列表,后面所有参数都被视为位置参数。

4、optstring详解

optstring 定义了允许的短选项,格式如下:

  • 单个字母表示一个短选项,如 v 表示 -v 选项。
  • 如果选项后面有冒号 :,则表示该选项需要一个参数,如 b: 表示 -b 需要一个参数。
  • 两个冒号 :: 表示该选项是可选的参数,这种用法较为少见。

5、示例

假设我们有一个脚本需要处理以下命令行选项:

  • -v--version: 显示版本信息。
  • -b <arg>--batch <arg>: 设置批处理模式。
  • -h--help: 显示帮助信息。
#!/bin/bash

# 使用 getopt 解析选项
PARSED_OPTIONS=$(getopt -o vhb: --long version,help,batch: -- "$@")

# 如果 getopt 解析出错,退出脚本
if [ $? -ne 0 ]; then
  echo "Error parsing options"
  exit 1
fi

# 将解析后的参数设置为位置参数
eval set -- "$PARSED_OPTIONS"

# 处理选项
while true; do
  case "$1" in
    -v | --version)
      echo "Version 1.0"
      shift
      ;;
    -h | --help)
      echo "Usage: $0 [options]"
      shift
      ;;
    -b | --batch)
      echo "Batch mode set to $2"
      shift 2
      ;;
    --)
      shift
      break
      ;;
    *)
      echo "Unknown option: $1"
      exit 1
      ;;
  esac
done

# 处理剩余的位置参数
echo "Remaining arguments: $@"

说明

  • getopt 解析选项:

    • getopt -o vhb: --long version,help,batch: -- "$@"
      • -o vhb: 定义了短选项 -v-h-b,其中 -b 需要一个参数。
      • --long version,help,batch: 定义了对应的长选项。
      • "$@" 代表脚本的所有输入参数。
  • eval set -- "$PARSED_OPTIONS":

    • getopt 的输出会被重新解析,并设置为脚本的位置参数。
  • while true; do 循环解析参数**:

    • 通过 case 语句处理每个选项,根据需要执行不同的操作。
  • 处理剩余的位置参数:

    • 脚本会在 -- 之后处理所有剩余的非选项参数。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值