Bash – pobieranie opcji z linii poleceń, wersja 2 czyli getopts

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.

Dodaj komentarz