Linux-getopt命令详解

本文介绍了getopt命令如何处理命令行选项和参数,包括其三种使用方式、optstring格式、选项冒号的含义,以及如何配合eval和set实现复杂选项处理。实例演示了如何在bash脚本中正确使用getopt,确保参数的正确解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

getopt命令记录

简介

getopt命令可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。

格式说明

getopt三种使用方式

# 第一种:无法处理带有空格的参数
getopt optstring parameters
# 第二种:可以处理带有空格的参数,但是需要结合eval使用
getopt [options] [--] optstring parameters
# 第三种:结合eval既可以处理带有空格的参数,也可以定义长选项(一个字母为短选项,一个字母以上是长选项)
getopt [options] -o|--options optstring [options] [--] parameters

options:getopt自带的参数定义
optstring:自定义选项参数
parameters:参数
理解:通过optstring自定义选项参数字符串格式化传入的parameters(参数),进行输出

要点

双破折线在optstring前和optstring后的区别

  • 在optstring前:最后一个参数为双破折线(–);如果定义一个无参数选项(不带冒号)执行时带了参数,参数会在–之后存在;–后如果存在形同自定义选项的写法(-m)会报错;getopt执行的结果值会带有引号
  • 在optstring后:optstring – 后面皆为参数;第一个参数为双破折线(–);-- 后如果存在形同自定义选项的写法(-m)不会报错;会将其作为参数进行处理;getopt执行的结果值不会带有引号

选项后一个冒号(:)、两个冒号、没冒号的区别

  • 无冒号(:):执行时,只有选项,不带参数。
  • 一个冒号(:):执行时必须带有参数(必选)。
  • 两个冒号(:):执行时可以选择性带参数,也可以不带(可选)。

多个自定义选项参数之间的分隔

  • 长选项:使用逗号(,)分隔
  • 短选项:可以使用逗号分隔,也可以不进行分隔,系统自动识别

长短选项执行时注意事项
长选项

  • 必选(1冒号):选项和参数之间可以使用等号(=)或空格分隔
  • 可选 (2冒号):选项和参数之间必须使用等号(=)进行分隔

使用 -o 或 -l 时,双破折线不能用在optstring前面,需要写在optstring之后(如第三种写法)
getopt命令报错时会继续执行后面的代码,实际使用时需要使用 $? 判断命令执行结果进行处理( 将getopt与eval、set分离处理)
TPS:还有更多细节, 可以实际在Linux命令行进行测验。如使用第三种写法(结合eval、set使用)则基本不会存在问题

使用

Example:

#!/bin/bash
#eval set -- $(getopt -- a:b:s:u "$@")
cmd_getopt=$(getopt -n $0 -o m::f:: -l mark::,file:: -- "$@")
[ $? -ne 0 ] && exit 1
eval set -- "$cmd_getopt"

while [ "$1" ];do
  case $1 in
    -m|--mark)
      mark="$2"
      shift 2;;
    -f|--file)
      file="$2"
      shift 2;;
    --)
      shift
      break;;
    *)
    echo "Usage [-m|-f] operate"
    exit 1;;
  esac
done
# 查看结果,可根据实际场景调用case中定义的变量
echo mark -- $mark
echo file -- $file
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值