使用getopts处理长命令行参数和短命令行参数

13 篇文章 0 订阅

getopts是一个内置的命令行参数解析工具,利用它可以让脚本支持短命令行参数解析,例如

python -V
curl http://127.0.0.1/base.dat -o base.dat

但它本身不支持长命令行参数解析,例如:

python --version
wget --tries=3 URL
java -jar application.jar --spring.profiles.active=prod

shell中要解析长命令行参数可以使用getopt工具,这是一个独立的外部程序,功能强大但相对复杂
以下做法是基于getopts,特殊处理-参数来达到处理长命令行参数的效果

longopts.sh

#!/bin/bash
#使用getopts处理长命令行参数和短命令行参数

# 长命令行参数处理
# 使用示例: --file=base.dat   --name="Michael Jordan"
function longopts(){
	case $1 in
		file)
			echo "file=$2"
			;;
		name)
			echo "name=$2"
			;;
		version)
			echo "v2.2.2"
			;;
		help)
			help ;;
		*)
			echo "无效或不存在的选项, 使用--help或-h获取帮助";exit 4 ;;
	esac
}

# 获取帮助
function help(){
	read -d '' help << EOF
usage: [-f <file>|--file=<file>][-h|--help][-v|--version]

  -f <file> | --file=<file>	指定文件
  --name=<name>			指定姓名
  -h | --help			获取帮助
  -v | --version		查询版本
EOF
	echo "$help"
	exit 4
}

# 短命令行参数处理 这里直接转到对应的长命令参数
while getopts ":f:vVh-:" opts; do
	case $opts in
		f)
			longopts "file" "$OPTARG" ;;
		v)
			longopts "version";;
		V)
			longopts "version";;
		h)
			longopts "help" ;;
		-)
			# 配置值空格兼容
			kv=${OPTARG// /@blank9527}
			array=(${kv/=/ })
			longopts "${array[0]}" "${array[1]//@blank9527/ }"
			;;
		?)	longopts ;;
	esac
done
[ $# = 0 ] && help

使用:

sh longopts.sh -v
>>v2.2.2
sh longopts.sh --version
>>v2.2.2
sh longopts.sh --file=base.dat --name="Michael Jordan"
>>file=base.dat
>>name=Michael Jordan
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值