Ślad: • sed • getopts

getopts - analiza opcji z argumentów

getopts służy 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 ...

Typowe użycie

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))

Wyjaśnienie składni

Pierwszy argument wywołania getopts (np. „:ab:”) to łańcuch określają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 komunikaty o błędach generowane przez getopts, umożliwiając ich własną obsługę w skrypcie.

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

Istotne zmienne

Zmienne ustawiane przez getopts:

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

Przykład działania

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ść

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

—-

Ten sam wynik zostanie uzyskany po wywołaniu:

./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

Zasoby online