微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

getopts用于标志和选项parsing

我正在使用getopts在我的脚本,我想工作它的所有选项parsing的顺序。

./myscript -c server ./myscript -c -h server ./myscript server -c ./myscript -h server -c ./myscript server

我正在使用myscript如下。

#!/bin/bash while getopts c:h: var do case $var in h) host=$OPTARG;; c) FLAG=1 esac done

这里的“服务器”是一个参数,应该加载甚至-h选项指定或不,还有-c选项我正在使用的FLAG.Is有一种方法来实现这一点。

在批处理中使用密码短语的最佳做法是什么?

如何在Windows 7/8 / 8.1(尤其是64位)上使用未签名的驱动程序

如何使用Ruby自动运行Windows Run应用程序

如何在没有GUI的情况下运行makecert.exe?

Docker和小型生产服务器基础设施build议

自动完全更新Windows

从Windows的命令行自动部署iOS

有没有一个python模块可以自动跨平台的系统configuration?

在使用PowerShell的控制台中使用CMD脚本时是否存在任何基本不兼容问题?

在Windows中自动执行任务的最佳方法

有时最好不要使用getopts :

#!/bin/bash while [[ $# -gt 0 ]]; do case "$1" in -c) FLAG=1 ;; -h) HOST=$2 shift ;; -*) echo "UnkNown option: $1" exit 1 ;; *) HOST=$1 ;; esac shift done

顺便说一句,你的脚本会给你一个语法错误,因为你错过了两个分号:

c) FLAG=1 ;;

我通过应用一些额外的验证来解决我的问题。

#!/bin/bash USAGE() { echo "Invalid Option" exit 1 } if [ $# -eq 2 ]; then case $1 in -c) FLAG=1; host=$2 ;; -h) host=$2 ;; esac if [ -z "$host" ]; then case $2 in -c) FLAG=1; host=$1;; -h) host=$1;; *) USAGE;; esac fi else while getopts q:c:h: OPTION do case ${OPTION} in q) USAGE;; h) host=$OPTARG;; c) FLAG=1 ;; *)USAGE;; esac done fi if [ $# -eq 1 ]; then host=$1 ;fi echo Host = $host FLag = $FLAG

在所有的情况下,我得到我的主机在我的脚本如此输出中所示。

$ ./myscript.sh server1 Host = server1 FLag = $ ./myscript.sh -c server1 Host = server1 FLag = 1 $ ./myscript.sh server1 -c Host = server1 FLag = 1 $ ./myscript.sh server1 -h Host = server1 FLag = $ ./myscript.sh -h server1 Host = server1 FLag =

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐