sh bash的命令行选项解析器模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh bash的命令行选项解析器模板相关的知识,希望对你有一定的参考价值。

#!/bin/bash

PROGNAME=$(basename $0)
VERSION="1.0.0"

usage() {
	echo "Usage: $PROGNAME [OPTIONS] [FILE]"
	echo "  This script is ~."
	echo
	echo "Options:"
	echo "  -h, --help"
	echo "      --version"
	echo "  -a, --long-a ARG"
	echo "  -b, --long-b [ARG]"
	echo "  -c, --check"
	echo
	exit 1
}

for OPT in "$@"
do
	case "$OPT" in
		'-h'|'--help' )
			usage
			exit 1
			;;
		'--version' )
			echo $VERSION
			exit 1
			;;
		'-a'|'--long-a' )
			if [[ -z "$2" ]] || [[ "$2" =~ ^-+ ]]; then
				echo "$PROGNAME: option requires an argument -- $1" 1>&2
				exit 1
			fi
			ARG_A="$2"
			shift 2
			;;
		'-b'|'--long-b' )
			if [[ -z "$2" ]] || [[ "$2" =~ ^-+ ]]; then
				shift
			else
				shift 2
			fi
			;;
		'-c'|'--check' )
			shift 1
			;;
		'--'|'-' )
			shift 1
			param+=( "$@" )
			break
			;;
		-*)
			echo "$PROGNAME: illegal option -- '$(echo $1 | sed 's/^-*//')'" 1>&2
			exit 1
			;;
		*)
			if [[ ! -z "$1" ]] && [[ ! "$1" =~ ^-+ ]]; then
				#param=( ${param[@]} "$1" )
				param+=( "$1" )
				shift 1
			fi
			;;
	esac
done

if [ -z $param ]; then
	echo "$PROGNAME: too few arguments" 1>&2
	echo "Try '$PROGNAME --help' for more information." 1>&2
	exit 1
fi

for ((i=0; i<${#param[@]}; i++)); do
	echo ${param[i]}
done

以上是关于sh bash的命令行选项解析器模板的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu10.04 默认脚本解析器更改(./sdk.unpack: 2: source: not found)

在 Bash 中解析命令行参数的最佳方法是啥?

Bash Shell中命令行选项/参数处理

ArchLinux下Shell基础学习

sh 用于bash的模板getopts参数解析各种类型的参数。

sh 如何使用bash / getopt解析选项的示例