getopts słuzy do analizy opcji i argumentów przekazywanych do skryptu lub funkcji.
Ułatwia przetwarzanie opcji w stylu Unix, np.:

./skrypt.sh -a -b x -c arg1 arg2 ...
./skrypt.sh -acbx arg1 arg2 ...

W skrypcie Bash, użycie getopts zwykle wygląda tak:

while getopts ":ab:" opt
do
  case $opt in
    a) echo "Opcja -a została wybrana"
       ;;
    b) echo "Opcja -b z argumentem: $OPTARG"
       ;;
    \?) echo "Nieznana opcja: -$OPTARG" >&2
       ;;
  esac
done

shift $((OPTIND -1))

Pierwszy argument wywołania getopts (np. „:ab:”) to łancuch definiujący dozwolone opcje:

  • litery bez dwukropka (np. a) oznaczają opcje bez argumentów,
  • litery z dwukropkiem (np. b:) oznaczają opcje wymagające argumentu,
  • dwukropek na początku ( : ) wyłącza domyślne komunikaty o błędach.

Drugi argument to nazwa zmiennej (np. opt), w której getopts zapisuje aktualnie przetwarzaną opcję.

Zmienne ustawiane przez getopts:

  • $opt - aktualnie przetwarzana opcja.
  • $OPTARG - argument opcji (jeśli dotyczy).
  • $OPTIND - indeks następnego argumentu do przetworzenia.

Dla wywołania skryptu:

./skrypt.sh -a -b wartość arg1 arg2

wynikiem działania powyższego skryptu będzie:

Opcja -a została wybrana
Opcja -b z argumentem: wartość

zaś pozostałe argumenty (arg1, arg2) po przesunięciu shift $((OPTIND-1)) będą dostępne jako $1 i $2.


Ten sam wynik zostanie uzyskany dla wywołania:

./skrypt.sh -abwartość arg1 arg2
Opcja -a została wybrana
Opcja -b z argumentem: wartość

W przypadku podania niepoprawnej opcji:

./skrypt.sh -a -x arg1 arg2

wynikiem będzie:

Nieznana opcja: -x