我需要修改我的一个脚本。到目前为止,它有两个强制性参数,指出将要应用此更新的更新版本和数据库
./script.sh version db_name
现在我想添加两个新的可选参数,实际上我应该称之为开关。这些开关将其扩展为: 1.安装之前停止(或不安装)我的Web服务器 2.还将一些新文件安装到文件系统 两个返回bool值。所有细节都在脚本中。 所以我希望有类似的东西:
./script.sh version db_name -stopweb -copyfiles
我已经发现 getopts 是合适的命令。问题是如何将参数(强制性)和开关(可选)“加入”在一起。我真的不能得到它:( 你能给我一些提示吗?
答案 0 :(得分:2)
您应该考虑使用getopts
。以下是我在bash脚本中用于选项解析的示例:
TEMP=$(getopt -o dp:v --long dev,publish:,verbose -- "$@")
# Note the quotes around '$TEMP': they are essential!
eval set -- "$TEMP"
#default values
DEV=0
VERBOSE=
while true; do
case "$1" in
-d | --dev ) DEV=1; shift ;;
-p | --publish ) PUBLISH="$2" ; shift 2;;
-v | --verbose ) VERBOSE="-v" ; shift ;;
-- ) if [ -n "$2" ]
then
ARGUMENT1=$2
if [ -n "$3" ]
then
ARGUMENT2=$3
if [ -n "$4" ]
then
shift 3
echo "Unexpected options: \"$@\" . exiting."
exit 1;
fi
fi
fi
shift 2; break;;
* ) break ;;
esac
done
# you can add some checks here that ARGUMENT1 and ARGUMENT2 were effectively set, if they are mandatory
一些功能:
-
注意:为了让getopts能够区分-dv
是两个短选项而--dev
是一个长选项;所有长期选项都应以两个连字符开头。