Домой Бложек
en|ru

Как сделать разбор аргументов в bash

Синтаксис: getopts optstring varname [arg ...]

optstring = строка со списком аргументов, varname - имя переменной, куда будеи записываться опция, arg - список аргументов (по умолчанию это $@).

Формат строки - список символов (запрещены ‘:’ и ‘?’), если после символа идёт ‘:’, то после опции должен быть аргумент.

Если строка начинается с ‘:’, то bash не будет писать об ошибках разбора сам (см. в примере скрипта).

OPTIND = индекс аргумента, в начале работы скрипта это 1, при каждом успешном вызове - инкрементируется. Можно выставить в другое значение. Он не сбрасывается автоматически!

OPTARG = аргумент опции, если таковой есть (например -n 1 -> OPTARG=1).

Если getopts встречает неверную опцию, он ставит varname в ‘?’, а в OPTARG - значение опции. Если опция верная, но отсутствует аргумент, то varname будет выставлена в ‘:’, а в OPTARG - также значение опции.

Пример (стащен отсюда https://www.golinuxcloud.com/bash-getopts/ и модифицирован):

#!/bin/bash

function usage {
        echo "Usage: $(basename $0) [-h] [-n NUM]"
}

# list of arguments expected in the input
optstring=":hn:"

while getopts ${optstring} arg; do
  case ${arg} in
    h)
      echo "showing usage!"
      usage
      ;;
    n)
      echo "-n arg is ${OPTARG}"
      ;;
    :)
      echo "$0: Must supply an argument to -$OPTARG." >&2
      exit 1
      ;;
    ?)
      echo "Invalid option: -${OPTARG}."
      exit 2
      ;;
  esac
done
echo $OPTIND
en|ru
Домой Бложек
Nickname sergzhum is registered!