Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ===== 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.: <code> ./skrypt.sh -a -b x -c arg1 arg2 ... ./skrypt.sh -acbx arg1 arg2 ... </code> ==== Typowe użycie ==== W skrypcie Bash użycie ''getopts'' zwykle wygląda tak: <code> 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)) </code> ==== 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 (<code>:</code>) 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: <code> ./skrypt.sh -a -b wartość arg1 arg2 </code> wynikiem działania powyższego skryptu będzie: <code> Opcja -a została wybrana Opcja -b z argumentem: wartość </code> 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: <code> ./skrypt.sh -abwartość arg1 arg2 Opcja -a została wybrana Opcja -b z argumentem: wartość </code> ---- W przypadku podania niepoprawnej opcji: <code> ./skrypt.sh -a -x arg1 arg2 </code> Wynikiem będzie: <code> Nieznana opcja: -x </code> ==== Zasoby online ==== * [[https://www.stackchief.com/tutorials/Bash%20Tutorial%3A%20getopts|Bash Tutorial: getopts]] * [[https://bash-hackers.gabe565.com/howto/getopts_tutorial/|Small getopts tutorial]]