getopts — встроенная команда bash для разбора флагов вида -v, -f file:

while getopts "v:f:h" opt; do
  case $opt in
    v) VERBOSE=$OPTARG ;;
    f) FILE=$OPTARG ;;
    h) exit 0 ;;
  esac
done
shift $((OPTIND - 1))

Двоеточие после буквы (v:, f:) — флаг требует аргумент, без него (h) — просто переключатель. $OPTIND после цикла указывает на первый нефлаговый аргумент, shift сдвигает $1 $2 ... на оставшиеся:

./script.sh -v 3 -f /etc/conf input.txt
# $VERBOSE=3 $FILE=/etc/conf $1=input.txt

Длинные флаги (--verbose) getopts не понимает — нужен внешний getopt или ручной case.

#linux #bash #sysadmin