boilerplate code for Linux getopt

Linux getopt command is often used to parse script options. I find a piece of boilerplate code for this command and mark it in this post for further reference.

  set -eu

  set +e

  options=$(getopt --name "demo.sh" -o "f:d" -l "file:,debug" -- "$@")

  if [ "$?" -ne 0 ]; then
    print_script_usage
    exit 1
  fi

  set -e

  eval set -- "${options}"

  while [[ "${#@}" -gt 0 ]]; do

    case "$1" in
    -f | --file )
      shift
      file=$1
      ;;
    -d | --debug )
      debug=1
      ;;
    --)
      shift
      ;;
    *)
      print_script_usage
      exit 1
      ;;
    esac

    shift
  done

-o is used to specify the short options, while -l is used to specify the long options. A colon following the option name indicates that the option requires a option argument.