linux脚本参数解析,Shell脚本参数解析

小编典典

您想使用getopt多头和空头期权。工作代码示例:

# Parse arguments

TEMP=$(getopt -n $PROGRAM_NAME -o p:P:cCkhnvVS \

--long domain-password:,pop3-password:\

,create,cron,kill,help,no-sync-passwords,version,verbose,skip-pop3 \

-- "$@")

# Die if they fat finger arguments, this program will be run as root

[ $? = 0 ] || die "Error parsing arguments. Try $PROGRAM_NAME --help"

eval set -- "$TEMP"

while true; do

case $1 in

-c|--create)

MODE="CREATE"; shift; continue

;;

-C|--cron)

MODE="CRON"; shift; continue

;;

-k|--kill)

MODE="KILL"; shift; continue

;;

-h|--help)

usage

exit 0

;;

-n|--no-sync-passwords)

SYNC_VHOST=0; shift; continue

;;

-p|--domain-password)

DOMAIN_PASS="$2"; shift; shift; continue

;;

-P|--pop3-password)

POP3_PASS="$2"; shift; shift; continue

;;

-v|--version)

printf "%s, version %s\n" "$PROGRAM_NAME" "$PROGRAM_VERSION"

exit 0

;;

-v|--verbose)

VERBOSE=1; shift; continue

;;

-S|--skip-pop3)

SKIP_POP=1; shift; continue

;;

--)

# no more arguments to parse

break

;;

*)

printf "Unknown option %s\n" "$1"

exit 1

;;

esac

done

注意,die是先前定义的功能(未显示)。

该-n选项告诉getopt将错误报告为我的程序的名称,而不是getopt。-o定义一个简短选项列表(:在一个选项之后指示所需的参数)并--long指定一个长选项列表(对应于简短选项)。

其余的只是一个简单的开关,shift适当地调用以前进参数指针。注意,打电话shift;

shift;只是一种顽固的习惯。在当前的现代世界中,shift 2可能就足够了。

现代的getopt在较新的平台上非常一致,但是您可能会在较旧的系统(大约在Redhat 9之前)上遇到一些可移植性问题。请参阅man

getopt以获取有关向后兼容性的信息。但是,您不太可能会遇到它的需求。

最后,在解析选项之后,您可以再次调用:

eval set -- "$@"

在完成getopt解析选项后,这会将参数指针移至命令行上剩余的任何位置。然后,您可以shift继续阅读它们。例如,如果命令如下所示:

./foo --option bar file1.txt file2.txt file3.txt

完成后,别忘了提供一个方便的-h /

--help选项来打印新的花式选项。:)如果使该输出对help2man友好,则会有一个即时手册页与您的新工具一起使用。

编辑

在大多数发行版中,您可以在中找到更多示例getopt代码/usr/share/doc/util-

linux/examples,这些代码应默认情况下已安装。

2020-06-07

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值