我的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))
答案 0 :(得分:1)
改变你拥有的东西:
while getopts "hb:c:p:" opt ; do
case "${opt}" in
b)
BIT_SIZE=${OPTARG}
if [ -z "${BIT_SIZE}" ]; then
usage
fi
;;
注意我更改了getopts
参数,修复了${b}
无效变量,并在]
案例中的b)
之前添加了必要的空格。
那会让你更接近。我不是100%我跟着你的用例,我理解的是我认为我可能采取不同的方法。例如,正如您现在编写的那样,-b 2048 -h
会产生与您和用户可能期望的不同的BIT_SIZE
。 (将其与-h -b 2048
进行比较,看看我的意思:通常,参数顺序与标志无关。)
修改强>
要使用-b
位值,否则使用-h
位值,否则使用默认值,我所做的相关更改是:
DEFAULT_BIT_SIZE=2048
isHardened="false"
while getopts "hb:c:p:" opt ; do
case "${opt}" in
b)
BIT_SIZE=${OPTARG}
if [ -z "${BIT_SIZE}" ]; then
usage
fi
;;
h)
isHardened="true"
;;
esac
done
shift $((OPTIND-1))
if [ -z "${BIT_SIZE}" -a "true" == "${isHardened}" ]; then
BIT_SIZE=4096
elif [ -z "${BIT_SIZE}" ]; then
BIT_SIZE=$DEFAULT_BIT_SIZE
fi