W jednym z poprzednich wpisów pokazałem metodę analizy podanych parametrów przez analizę kolejnych wartości zmiennych $1 itd.
Teraz przyjrzymy się kolejnej metodzie, korzystającej z wbudowanej w Basha funkcji getopts.
while getopts "opcje" OPTION do case $OPTION in opcja1) echo "akcja1";; opcja2) echo "akcja2";; opcaj3) echo "akcja3"; ARGUMENT=$OPTARG; *) echo "Błędna opcja"; exit 1;; esac done
W łańcuchu znakowym „opcje” podajemy listę opcji (liter lub cyfr), jeżeli jest za znakiem jest dwukropek, powinien być podany parametr oraz jego wartość np. „-h host1”.
OPTION natomiast jest nazwą zmiennej, która przechowuje parametr. Pozwala określić przy pomocy „case”, którą opcję wybrano. Jeżeli chcemy podstawić wartość parametru,
użyć możemy zmiennej $OPTARG.
Przykładowy skrypt:
#! /bin/bash while getopts "a:bc1" OPTION do case $OPTION in a) echo "akcja1, wartość parametru: $OPTARG";; b) echo "akcja2";; c) echo "akcja3";; 1) echo "akcja4";; *) echo "Błędna opcja"; exit 1;; esac done exit 0
Pyrzkład użycia:
czz60610@czz60610-laptop:~/tmp$ ./getops.sh -a "test test3" -c -1 akcja1, wartość parametru: test test3 akcja3 akcja4
Róznice między getops a analizą poszczególnych opcji:
- z getops możliwe są tylko krótkie opcje, nie można używać całych wyrazów, na przykład „–lista” jest niedozwolona,
- nie można używać dwóch minusów
- mniejsza kontrola nad błędami, pierwsza niepoprawna opcja kończy analizę parametrów (czasami zgłaszany jest błąd, czasami nie),
Różnice między podobną funkcją w Perl-u:
- W Perlu możesz zażądać aby parametr był określonego typu, np. liczbą, tutaj nie ma tej możliwości.
- nie ma różnicy czy stosujemy jeden czy dwa minusy, funkcja poprawnie odgadnie, o co nam chodzi.