0

I have the following program foo, that can take one of three optional flags, f, g, or s:

usage()
{
    echo "Use this correctly"
}

while getopts "fgs" opt; do
    case $opt in
        f)
          echo f
          foo="$OPTARG"
          echo $foo
          ;;  
        g) 
          echo g 
          foo="g"
          ;;  
        s)  
          echo s
          foo="s"
          ;;  
    esac
done

if [ -z "$foo" ]
then
   usage
   exit
fi

echo $foo
exit

When I do foo -g or foo -s I get the expected outputs:

g
g

and

s
s

respectively. But when I do foo -f bar I expect

f
bar
bar

but get

f
Use this correctly

indicating that $foo is not being set properly in the -f case. What am I doing wrong?

Charles Duffy
  • 280,126
  • 43
  • 390
  • 441
Mike S
  • 1,451
  • 1
  • 16
  • 34

1 Answers1

3

You have to replace

while getopts "fgs" opt; do

with

while getopts "f:gs" opt; do

Options that take an argument must be followed by a colon. Only for these options, getopts sets the OPTARG variable.

hnicke
  • 602
  • 4
  • 7