0
0
Bash Scriptingscripting~20 mins

Option parsing with getopts in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Getopts Guru
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this getopts script?
Consider this bash script snippet using getopts to parse options. What will it print when run with arguments -a -b value -c?
Bash Scripting
#!/bin/bash
while getopts "ab:c" opt; do
  case $opt in
    a) echo "Option a set";;
    b) echo "Option b set with value $OPTARG";;
    c) echo "Option c set";;
    *) echo "Invalid option";;
  esac
done
A
Option a set
Option b set with value
Option c set
B
Option a set
Option b set with value value
Option c set
C
Option a set
Option b set with value value
D
Option a set
Option c set
Attempts:
2 left
💡 Hint
Remember that getopts processes options one by one and that options with a colon expect an argument.
💻 Command Output
intermediate
2:00remaining
What error does this getopts usage produce?
What error or output results from running this script with arguments -x?
Bash Scripting
#!/bin/bash
while getopts "ab:" opt; do
  case $opt in
    a) echo "Option a";;
    b) echo "Option b with $OPTARG";;
    *) echo "Unknown option: $opt";;
  esac
done
AOption b with x
Bgetopts: illegal option -- x
COption a
DUnknown option: x
Attempts:
2 left
💡 Hint
Check how getopts handles options not defined in the option string.
📝 Syntax
advanced
2:00remaining
Which option string correctly requires an argument for option 'f'?
You want to parse options where option 'f' requires an argument. Which option string is correct for getopts?
A"f:"
B"f"
C":f"
D":f:"
Attempts:
2 left
💡 Hint
In getopts, a colon after an option letter means it requires an argument.
🚀 Application
advanced
2:00remaining
How to correctly shift positional parameters after getopts?
After parsing options with getopts, you want to remove the processed options from the positional parameters. Which command correctly shifts the parameters?
Ashift $((OPTIND - 1))
Bshift $OPTIND
Cshift $((OPTIND))
Dshift $((OPTIND + 1))
Attempts:
2 left
💡 Hint
OPTIND points to the next argument to be processed, so subtract 1 to shift processed options.
🔧 Debug
expert
3:00remaining
Why does this getopts script fail to parse option arguments correctly?
Given this script snippet, why does it fail to print the argument for option 'd' when run with -d value?
#!/bin/bash
while getopts "d" opt; do
  case $opt in
    d) echo "Option d with argument $OPTARG";;
    *) echo "Invalid option";;
  esac
done
Agetopts does not support options with arguments
BOPTARG is not set because the script uses the wrong variable name
COption 'd' is not marked to require an argument in the option string
DThe script is missing a shift command after getopts
Attempts:
2 left
💡 Hint
Check the option string passed to getopts and how it indicates required arguments.