我正在按照本指南使用获取选择。
#!/bin/bash
ALPHA=test
BETA=test
CHARLIE=test
DELTA=test
usage()
{
echo "Usage: alphabet [ -a | --alpha ] [ -b | --beta ]
[ -c | --charlie CHARLIE ]
[ -d | --delta DELTA ] filename(s)"
exit 2
}
PARSED_ARGUMENTS=$(getopt -a -n alphabet -o a:b:c:d: --long alpha:,bravo:,charlie:,delta: -- "$@")
VALID_ARGUMENTS=$?
if [ "$VALID_ARGUMENTS" != "0" ]; then
usage
fi
eval set -- "$PARSED_ARGUMENTS"
while :
do
case "$1" in
-a | --alpha) ALPHA="$2" ; shift 2 ;;
-b | --beta) BETA="$2" ; shift 2 ;;
-c | --charlie) CHARLIE="$2" ; shift 2 ;;
-d | --delta) DELTA="$2" ; shift 2 ;;
--) shift; break ;;
*) echo "Unexpected option: $1 - this should not happen."
usage ;;
esac
done
echo "ALPHA : $ALPHA"
echo "BETA : $BETA "
echo "CHARLIE : $CHARLIE"
echo "DELTA : $DELTA"
echo "Parameters remaining are: $@"
所以所有的参数都是强制性的,如果我们没有给出参数,那么它将返回默认值(我从一开始就分配的值)
前任:
./script
PARSED_ARGUMENTS is --
ALPHA : unset
BETA : unset
CHARLIE : unset
DELTA : unset
例2
./script -a aaa
PARSED_ARGUMENTS is -a 'aaa' --
ALPHA : aaa
BETA : unset
CHARLIE : unset
DELTA : unset
Parameters remaining are:
到这里就完美了。
问题:
现在,如果我调用参数但在触发脚本时没有给出任何值,则会抛出错误。
./script -a
alphabet: option requires an argument -- 'a'
Usage: alphabet [ -a | --alpha ] [ -b | --beta ]
[ -c | --charlie CHARLIE ]
[ -d | --delta DELTA ] filename(s)
在这种情况下,如果我没有给出值,-a
那么它应该采用默认值。(从一开始)
答案1
你不能只给出“-a”并且不带任何参数,而是根本不提及“-a”,并且在脚本中如果未给出-a选项,则可以分配一个默认值,如下所示:
if [[ -z $ALPHA ]]
then
ALPHA="defaultvalue"
fi