Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Option parsing with getopts in Bash Scripting - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of getopts in bash scripting?

getopts helps scripts read and handle command-line options (flags) easily and consistently.

It parses options like -a or -b value so your script can respond accordingly.

Click to reveal answer
beginner
How do you specify that an option requires an argument in getopts?

In the options string passed to getopts, add a colon : right after the option letter.

For example, getopts "a:b" means -a needs an argument, -b does not.

Click to reveal answer
intermediate
What variable does getopts use to store the current option letter?

getopts stores the current option letter in the shell variable given as its second argument (typically named opt).

OPTARG holds the argument value for options that require one, while OPTIND tracks the next index to process.

Click to reveal answer
intermediate
What does the variable OPTIND represent in getopts usage?

OPTIND is the index of the next argument to be processed by getopts.

It starts at 1 and increments as options are parsed, helping your script know where options end and positional arguments begin.

Click to reveal answer
beginner
Write a simple getopts loop to handle options -a (no argument) and -b (requires argument).
while getopts "ab:" opt; do
  case $opt in
    a) echo "Option a triggered" ;;
    b) echo "Option b with value: $OPTARG" ;;
    *) echo "Invalid option" ;;
  esac
done
Click to reveal answer
In getopts, how do you indicate that an option requires an argument?
AAdd a colon ':' after the option letter in the options string
BAdd a semicolon ';' after the option letter
CUse uppercase letters for options with arguments
DPut the option letter inside square brackets
Which variable holds the argument value for an option in getopts?
AOPTARG
BOPTIND
COPTVAL
DOPTOPT
What does OPTIND represent in getopts?
AThe total number of options parsed
BThe current option letter
CThe index of the next argument to process
DThe exit status of the last command
What happens if getopts encounters an unknown option?
AIt throws a syntax error
BIt stops the script immediately
CIt ignores the option silently
DIt sets the option variable to '?'
Which command correctly starts a getopts loop for options -x and -y with -y requiring an argument?
Awhile getopts "xy" opt; do ... done
Bwhile getopts "xy:" opt; do ... done
Cwhile getopts "x:y:" opt; do ... done
Dwhile getopts "x:y" opt; do ... done
Explain how to use getopts to parse command-line options in a bash script.
Think about how you tell the script which options need arguments and how you handle each option inside the loop.
You got /4 concepts.
    Describe the roles of OPTARG and OPTIND when using getopts.
    One stores values, the other tracks position.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the getopts command in bash scripting?
      easy
      A. To read input from a file
      B. To parse command-line options and their arguments easily
      C. To execute commands in parallel
      D. To create new files automatically

      Solution

      1. Step 1: Understand the role of getopts

        getopts is a built-in bash command designed to handle command-line options and their arguments in scripts.
      2. Step 2: Compare with other options

        Other options like executing commands or reading files are not related to option parsing, which is the specific task of getopts.
      3. Final Answer:

        To parse command-line options and their arguments easily -> Option B
      4. Quick Check:

        getopts = option parsing [OK]
      Hint: Remember: getopts reads options, not files or commands [OK]
      Common Mistakes:
      • Confusing getopts with file reading commands
      • Thinking getopts runs commands in parallel
      • Assuming getopts creates files
      2. Which of the following is the correct syntax to start parsing options with getopts in a bash script?
      easy
      A. while getopts "ab:" opt; do case $opt in a) echo "Option a" ;; b) echo "Option b with $OPTARG" ;; esac; done
      B. for opt in getopts "ab:"; do echo $opt; done
      C. if getopts "ab:" opt; then echo $opt; fi
      D. getopts -a -b

      Solution

      1. Step 1: Identify correct getopts usage

        The correct way to use getopts is inside a while loop with a case statement to handle each option.
      2. Step 2: Check each option

        The correct syntax uses while getopts "ab:" opt; do ... case $opt in a)... b)... esac; done. Other options use invalid control structures like for or if, or incorrect command syntax.
      3. Final Answer:

        while getopts "ab:" opt; do case $opt in a) echo "Option a" ;; b) echo "Option b with $OPTARG" ;; esac; done -> Option A
      4. Quick Check:

        while + getopts + case = correct syntax [OK]
      Hint: Use while loop with getopts and case for options [OK]
      Common Mistakes:
      • Using for loop instead of while
      • Missing case statement for options
      • Incorrect getopts command syntax
      3. What will be the output of the following script if run as ./script.sh -a -b value?
      while getopts "ab:" opt; do
        case $opt in
          a) echo "Option a set" ;;
          b) echo "Option b set with $OPTARG" ;;
        esac
      done
      medium
      A. Option a set Option b set with value
      B. Option a set Option b set with -b
      C. Option b set with value
      D. No output

      Solution

      1. Step 1: Analyze the command line arguments

        The script is called with -a and -b value. Option a has no argument, b requires an argument.
      2. Step 2: Trace getopts parsing

        getopts processes the arguments sequentially. It first encounters -a, sets $opt to a, and echoes Option a set Option a set Option b set with -b set with value set. Next, -b value sets $opt to b and $OPTARG to value, echoing Option a set Option b set with -b set with value.
      3. Final Answer:

        Option a set Option b set with value -> Option A
      4. Quick Check:

        Options a and b with argument = output A [OK]
      Hint: Remember colon means option needs argument [OK]
      Common Mistakes:
      • Confusing option argument with option name
      • Ignoring option arguments
      • Assuming options print nothing
      4. Given this snippet:
      while getopts "ab:" opt; do
        case $opt in
          a) echo "Option a" ;;
          b) echo "Option b with $OPTARG" ;;
          ?) echo "Invalid option" ;;
        esac
      done

      What is the problem if the script is run with -b but no argument?
      medium
      A. getopts will crash with syntax error
      B. getopts will ignore -b and continue silently
      C. getopts will treat -b as option without argument and print "Option b with"
      D. getopts will set opt to '?' and print "Invalid option"

      Solution

      1. Step 1: Understand getopts behavior for missing argument

        If an option that requires an argument (like b:) is given without one, getopts sets opt to '?' to indicate an error.
      2. Step 2: Check case handling

        The case statement has a '?' option that echoes "Invalid option". So the script will print that message.
      3. Final Answer:

        getopts will set opt to '?' and print "Invalid option" -> Option D
      4. Quick Check:

        Missing argument triggers '?' and error message [OK]
      Hint: Missing argument triggers '?' option in getopts [OK]
      Common Mistakes:
      • Assuming getopts crashes on missing argument
      • Thinking option is accepted without argument
      • Ignoring '?' case in script
      5. You want to write a script that accepts options -f (file name) and -v (verbose flag). Which getopts string and case structure correctly handle these options, where -f requires an argument and -v does not?
      hard
      A. getopts string: "fv"; case: v) verbose=1 ;; f) file=$OPTARG ;;
      B. getopts string: "fv:"; case: f) file=$OPTARG ;; v) verbose=1 ;;
      C. getopts string: "vf:"; case: v) verbose=1 ;; f) file=$OPTARG ;;
      D. getopts string: "vf"; case: f) file=$OPTARG ;; v) verbose=1 ;;

      Solution

      1. Step 1: Determine correct optstring

        Option -f requires an argument, so it must be followed by a colon: f:. Option -v is a flag, no colon needed. The correct string has ':' immediately after 'f', such as "vf:". Strings like "fv:" place ':' after 'v', making -v require an argument, which is wrong; missing ':' means no arguments expected.
      2. Step 2: Match case statement to options

        Case must handle v by setting verbose flag and f by assigning $OPTARG to file variable. getopts string: "vf:"; case: v) verbose=1 ;; f) file=$OPTARG ;; matches this correctly.
      3. Final Answer:

        getopts string: "vf:"; case: v) verbose=1 ;; f) file=$OPTARG ;; -> Option C
      4. Quick Check:

        Option with colon needs argument, flag no colon [OK]
      Hint: Put colon after options needing arguments only [OK]
      Common Mistakes:
      • Placing colon after flag option
      • Swapping option letters and arguments
      • Not assigning $OPTARG for options needing arguments
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard