【发布时间】:2014-09-21 10:28:46
【问题描述】:
我的 getopts 函数无法正常工作。应该发生的是,如果没有给出任何参数,那么一切都是默认的。我有以下四种选择:
-b 需要两个 2048 或 4096 之一的值,否则使用。
-c 需要一个路径值,否则使用。
-p 需要一个路径值,否则使用
-h 确实需要一个被忽略的值。
但如果我放弃一个选项,它就不允许我继续。所以我需要能够将 0 设置为 4。
msg=""
nginx_ssl_conf=/etc/nginx/nginx-ssl.conf
BIT_SIZE=2048
isHardened=false
hardened_ciphers="'ECDH+AESGCM256:DH+AESGCM256:ECDH+AES256:SH+AES256:RSA+AESGCM256:RSA+AES256:!aNULL:!MD5:!kEDH';"
DHEC_path=$STORAGE_ROOT/ssl/dhparam.pem
# Usage info
usage() {
cat << EOF
Usage: ${0##*/} [-h] [-p DIR_DHEC_KEY] [-b BIT_SIZE] [-c DIR_NGINX_SSL]...
This script generates and enables DHEC for Nginx. Defaulted to 2048 key.
Hardened mode will generate 4096 key and the following cipher suites:
'ECDH+AESGCM256:DH+AESGCM256:ECDH+AES256:SH+AES256:RSA+AESGCM256:RSA+AES256:!aNULL:!MD5:!kEDH'
-h Enable hardened ciphers and 4096 bit key.
-p Specify dir to generate the DHEC key.
-c Specify dir nginx ssl conf is.
-b Specify the bit size to generate.
EOF
exit 1
}
while getopts "::b:h:::p::c" opt ; do
case "${opt}" in
b)
BIT_SIZE=${OPTARG}
if [ -z "${b}"]; then
usage
fi
;;
h)
isHardened=true
BIT_SIZE=4096
;;
p)
DHEC_path=${OPTARG}
;;
c)
nginx_ssl_conf=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
【问题讨论】:
-
bash
getopts据我所知不做可选参数。有关处理参数的各种方法,请参阅 mywiki.wooledge.org/BashFAQ/035(以及链接的 getopts 教程)。
标签: bash command-line-arguments getopts