我正在使用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脚本时是否存在任何基本不兼容问题?
有时最好不要使用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] 举报,一经查实,本站将立刻删除。