在shell脚本中添加使用内容而不使用getopts

San*_*San 10 unix linux shell getopts

我有脚本,我需要显示使用命令,以防用户在执行脚本时错过任何必要的信息.

Usage : Script -s <server> -i <instance> -u <user> -p <password> <query> -w <warning value> -c <critical value>
Run Code Online (Sandbox Code Playgroud)

随着所有的解释 OPTIONS

我从参数中得到的值如下变量时尚.但我希望在shell脚本中使用此验证.

SERVER=$1
INSTANCE=$2
USER=$3
DB_PASSWD=$4
QUERY=$5
VAL_WARN=$6
VAL_CRIT=$7
Run Code Online (Sandbox Code Playgroud)

我尝试过使用getopts,但由于在传递值之前<query>没有-q参数,因此无法使用.

我已经尝试找到所有其他方法,但每个人都建议getopts这对我来说不是可行的解决方案.

请帮我这个..

小智 22

使用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"
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

编辑:根据@technosaurus的建议在脚本中添加参数验证