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