I have script where i need to display usage command in case user miss any mandatory information while executing script.
Usage : Script -s <server> -i <instance> -u <user> -p <password> <query> -w <warning value> -c <critical value>
With explanation about all the OPTIONS
I'm getting values from arguments as below variables fashion. But I want this usage with validations in shell script.
SERVER=$1
INSTANCE=$2
USER=$3
DB_PASSWD=$4
QUERY=$5
VAL_WARN=$6
VAL_CRIT=$7
I have tried using getopts, But failed to use since <query>
doesn't have a -q
parameter before passing the value.
I have tried finding all other ways, But everyone suggested getopts which is not feasible solution for me.
Please help me on this..
Use shift to iterate through all of your arguments, something like:
#!/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"
Should do the trick.
EDIT: added argument validation in the script as suggested by @technosaurus
getopts
is bitching for a good reason. you should change your script's interface to conform to what people expect.
alternatively, you could use getopts
twice, first for the pre-query
options, shift
, then for the rest.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With