我有脚本,我需要在其中显示用法命令,以防用户在执行脚本时错过任何强制信息。
Usage : Script -s <server> -i <instance> -u <user> -p <password> <query> -w <warning value> -c <critical value>
关于所有OPTIONS
的解释
我从以下变量时尚的参数中获取值。但我希望在 shell 脚本中使用这种验证方法。
SERVER=$1
INSTANCE=$2
USER=$3
DB_PASSWD=$4
QUERY=$5
VAL_WARN=$6
VAL_CRIT=$7
我尝试过使用 getopts,但自从 <query>
后就无法使用了没有 -q
传递值之前的参数。
我试过寻找所有其他方法,但每个人都建议 getopts 这对我来说不是可行的解决方案。
请帮我解决这个问题..
最佳答案
使用 shift 遍历所有参数,例如:
#!/bin/sh
usage ()
{
echo 'Usage : Script -s <server> -i <instance> -u <user> -p <password>'
echo ' <query> -w <warning value> -c <critical value>'
exit
}
if [ "$#" -ne 13 ]
then
usage
fi
while [ "$1" != "" ]; do
case $1 in
-s ) shift
SERVER=$1
;;
-i ) shift
INSTANCE=$1
;;
-u ) shift
USER=$1
;;
-p ) shift
PASSWORD=$1
;;
-w ) shift
WARNINGVAL=$1
;;
-c ) shift
CRITICVAL=$1
;;
* ) QUERY=$1
esac
shift
done
# extra validation suggested by @technosaurus
if [ "$SERVER" = "" ]
then
usage
fi
if [ "$INSTANCE" = "" ]
then
usage
fi
if [ "$USER" = "" ]
then
usage
fi
if [ "$PASSWORD" = "" ]
then
usage
fi
if [ "$QUERY" = "" ]
then
usage
fi
if [ "$WARNINGVAL" = "" ]
then
usage
fi
if [ "$CRITICVAL" = "" ]
then
usage
fi
echo "ALL IS WELL. SERVER=$SERVER,INSTANCE=$INSTANCE,USER=$USER,PASSWORD=$PASSWORD,QUERY=$QUERY,WARNING=$WARNINGVAL,CRITIC=$CRITICVAL"
应该可以解决问题。
编辑:按照@technosaurus 的建议在脚本中添加了参数验证
关于linux - 在没有getopts的shell脚本中添加使用内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14975057/