Add usage content in shell script without getopts
getopts, linux, shell, unix
Solution
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
Problem
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..