简体   繁体   中英

Handle multiple options in a bash script

I have this simple bash script

if [ $# -eq 0 ]
    then du
else
while getopts :d:h:s:r:f:a: option; do
    case $option in
        d) echo 'd';;
        h) echo 'h';;
        s) echo 's';;
        r) echo 'r';;
        f) echo 'f';;
        a) echo 'a';;
        \?) echo 'option invalide,-h pour obtenir I aide' 
    esac
done
fi

and when I call it with ./script.sh -d -a for example I would like to get "da" returned.

Problem is I only get "d" or "a" if I call it in the other order.

How can I do to have the script doing all present options instructions?

Your call to getopt declared every option to take an argument by following each name with a : . As such, script.sh -d -a recognizes the -d option with argument -a , but you ignore the argument. The same holds for script.sh -a -d : you recognize -a but ignore its -d option.

If you omit the : s, then the options are simply flags that take no argument, and you'll see each option in turn:

while getopts :dhsrfa option; do

When you do use : , the argument provided with the option is available in the OPTARG parameter. Try your script with the following:

while getopts :d:h:s:r:f:a: option; do
    case $option in
        d) echo "d with $OPTARG";;
        h) echo "h with $OPTARG";;
        s) echo "s with $OPTARG";;
        r) echo "r with $OPTARG";;
        f) echo "f with $OPTARG";;
        a) echo "a with $OPTARG";;
        \?) echo 'option invalide,-h pour obtenir I aide' 
    esac
done

You can pass more than one argument to your bash script. In general, here is the syntax of passing multiple arguments to any bash script:

script.sh arg1 arg2 arg3 … The second argument will be referenced by the $2 variable, the third argument is referenced by $3, .. etc.

The $0 variable contains the name of your bash script in case you were wondering!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM