getopts
- getopts – wbudowana funkcja powłoki (bash, ksh, zsh), umożliwiająca łatwe przetwarzanie opcji przekazanych do skryptu (np.
-a
,-b
,-f plik
). - Działa w pętli
while
, analizując przekazane argumenty w sposób zbliżony do narzędzi POSIX. - Obsługuje opcje jednoznakowe oraz ich parametry; nie wspiera długich opcji (
--help
,--version
).
Składnia
Dział zatytułowany „Składnia”getopts optstring zmienna
optstring
– lista dozwolonych opcji (np.abf:
–f
wymaga argumentu).zmienna
– zmienna, w której przechowywana jest aktualnie przetwarzana opcja.
Parametry
Dział zatytułowany „Parametry”Element | Opis |
---|---|
optstring | Łańcuch zawierający znaki opcji; : po znaku oznacza, że wymaga argumentu |
$OPTIND | Indeks następnego analizowanego argumentu (domyślnie 1) |
$OPTARG | Argument opcji, jeśli wymagany (np. nazwa pliku dla -f plik ) |
getopts | Funkcja wywoływana w pętli while do analizy argumentów |
Przykłady użycia
Dział zatytułowany „Przykłady użycia”#!/bin/bashwhile getopts "abf:" opcja; do case "$opcja" in a) echo "Wybrano opcję A" ;; b) echo "Wybrano opcję B" ;; f) echo "Wybrano plik: $OPTARG" ;; *) echo "Użycie: $0 [-a] [-b] [-f plik]" ; exit 1 ;; esacdone
"abf:"
–a
ib
to opcje bez argumentów,f
wymaga argumentu.getopts
automatycznie analizuje$@
, a$OPTIND
wskazuje bieżącą pozycję.- Użytkownik wywołuje skrypt np.
./skrypt.sh -a -f dane.txt
.
getopts
przetwarza wyłącznie opcje jednoznakowe (nie--help
).- Argumenty pozycyjne po opcjach dostępne są przez
${@:$OPTIND}
. - Gdy opcja wymaga argumentu, musi być on osobnym tokenem (
-f plik.txt
a nie-fplik.txt
). - Aby rozpocząć analizę od początku, można zresetować
$OPTIND=1
.
Najczęściej spotykane błędy i jak je naprawić
Dział zatytułowany „Najczęściej spotykane błędy i jak je naprawić”Błąd / Komunikat | Przyczyna | Rozwiązanie |
---|---|---|
Błędna analiza opcji | Niewłaściwa składnia optstring | Upewnij się, że użyto : dla opcji wymagających argumentu |
$OPTARG pusty | Brak przekazanego argumentu | Sprawdź, czy użytkownik podał wartość po opcji (np. -f plik ) |
Opcje ignorowane | Brak getopts w pętli while | Upewnij się, że getopts wywoływane jest poprawnie w strukturze while |
Linki i źródła
Dział zatytułowany „Linki i źródła”- Bash Reference – getopts – dokumentacja oficjalna.
- POSIX
getopts
– standard POSIX. - TLDP – Bash getopts – przewodnik początkującego.