Jak używać getopts do analizowania opcji skryptu
- 4752
- 800
- Ignacy Modzelewski
Cel
Dowiedz się, jak korzystać z bash getopts
Zbudowany, aby analizować opcje skryptu
Wersje systemu operacyjnego i oprogramowania
- System operacyjny: - Wszystkie dystrybucje Linux
Wymagania
- Brak specjalnych wymagań, tylko dostęp do skorupy bash
Trudność
ŚREDNI
Konwencje
- # - Wymaga podanych poleceń Linuksa, które można wykonać z uprawnieniami root
bezpośrednio jako użytkownik root lub za pomocąsudo
Komenda - $ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny
Wstęp
Modyfikacja zachowania skryptu BASH za pomocą opcji czasu wykonywania, podobnie jak zwykle z programami wiersza poleceń, może być bardzo przydatne. Shell Bash zapewnia getopts
Wbudowane polecenie, standardowy sposób na osiągnięcie tego. Jak go używać, nauczymy się w tym samouczku.
Tworzenie naszego skryptu testów
Na potrzeby tego samouczka stworzymy skrypt testowy i, z dużą ilością fantazji, nazwiemy to test.cii
. Celem tego skryptu będzie wyświetlenie czegoś w zależności od opcji, którą zapewniamy (nie będzie to najbardziej użyteczny skrypt na świecie, ale wystarczy wyjaśnić, jak to działa).
Otwórzmy nasz edytor tekstu i zacznijmy:
#!/bin/bash Set -e Set -u Set -o PipeFail
Dostarczone opcje powłoki na początku scenariuszy nie są obowiązkowe, ale dobre nawyk jest używać ich w każdym skrypcie, który piszemy. W skrócie, -mi
, krótki Errexit
modyfikuje zachowanie powłoki, które wychodzi z powodu, gdy polecenie wyjdzie ze statusem non zero (z pewnymi wyjątkami). -u
to kolejna bardzo ważna opcja: sprawia, że skorupa traktuje niezdefiniowane zmienne jako błędy.
Wreszcie PUREFAIL
zmienia sposób, w jaki polecenia w rurze są oceniane. Status wyjścia rury będzie statusem najwyższego polecenia, aby wyjść z statusem non zero, lub zero, jeśli wszystkie programy w rurze zostaną pomyślnie wykonywane. Innymi słowy, rura zostanie uznana za skuteczną, jeśli wszystkie zaangażowane polecenia zostaną wykonywane bez błędów.
Konstrukcja getopts
Po tej krótkiej dygresji wróćmy do głównego punktu tego samouczka i zobaczmy, jak getopts
Pracuje:
#!/bin/bash set -e set -u Set -o PipeFail, a getopts 'lha:' opcja; zrób „$ opcja” w l) echo „LinuxConfig” ;; h) echo „H oznacza h” ;; a) avalue = "$ optarg" echo "dostarczona wartość to $ optarg" ;; ?) Echo „Zastosowanie skryptu: $ (nazwa podstawy \ $ 0) [-l] [-h] [-a Somevalue]”> i 2 wyjście 1 ;; ESAC DODAK SHIFT „$ (($ optind -1))”
Przeanalizujmy, co mamy powyżej. Przede wszystkim getopts
Polecenia muszą być używane wewnątrz chwila
pętla, więc wszystkie opcje są analizowane. Następnie natychmiast po getopts
Słowo kluczowe, zdefiniowaliśmy możliwe opcje, które zaakceptuje nasz skrypt. Oni są L
, H
i w końcu A
.
Co oznacza okrężnica po tej ostatniej opcji? To sposób, w jaki informujemy getopts, że opcja wymaga argumentu. Każda opcja przeanalizowana będzie przechowywana wewnątrz $ Opcja
zmienna, podczas gdy argument, gdy jest obecny, stanie się wartością$ Optarg
jeden.
Każda opcja jest zarządzana w instrukcji sprawy, z ostatecznym ?
przypadek, który będzie dopasowany, gdy zostanie dostarczona opcja, która nie istnieje. W takim przypadku po prostu odzwierciedlmy użytkownika poprawne użycie skryptu i wyjdziemy z kodu błędu.
Testowanie naszego skryptu
Najpierw nazwiemy nasz skrypt, zapewniając nie istniejącą opcję, aby przetestować przypadek, o którym wspomniano powyżej. Podajmy skrypt uprawnienia wykonywalne, a następnie nazwijmy go:
Test CHMOD +X.cii && ./Tesh.sh -c
Zgodnie z oczekiwaniami otrzymamy wiadomość z informacją, że dostarczona opcja jest nielegalna, a następnie instrukcje dotyczące korzystania z skryptu:
./test.SH: Nielegalna opcja - C Użycie skryptu: Test.sh [-l] [-h] [-a Somevalue]
Podczas Wykorzystanie skryptu
String to ten, który ustawiliśmy do wydrukowania na błędach użytkowania, powyżej, jest to komunikat automatycznie generowany przez getopts
i można go wyłączyć, poprzedzając opcje :
. Zobaczmy teraz, co się stanie, gdy używamy skryptu tak, jak miało to na celu:
./test.sh -l Linuxconfig
Użyliśmy L
opcja, a skrypt wydrukowany na ekranie String, który ustawiamy w odpowiednim przypadku, właśnie tak się stanie, jeśli dostarczymy -H
opcja:
./test.sh -h h oznacza h
Spróbujmy teraz wywołać skrypt z A
opcja. Jak wspomniano powyżej, ta opcja wymaga argumentu i zawiedzie, jeśli ten ostatni nie zostanie dostarczony:
./test.sh -a ./test.SH: Opcja wymaga argumentu - użycie skryptu: test.sh [-l] [-h] [-a Somevalue]
Zgodnie z oczekiwaniami skrypt odpowiedział komunikatem o błędzie, przypominając nam, że podana przez nas opcja wymaga argumentu:
./test.SH -a TUX Dostarczona wartość to smoking
Tym razem skrypt odpowiedział bez błędu. Zwróć uwagę, jak przekazaliśmy argument, smoking
jest wydrukowany, ponieważ staje się wartością $ Optarg
zmienny.
Za pomocą getopts
, Możesz podać także więcej niż jedną opcję w tym momencie do skryptu, łącząc flagi podczas jej uruchomienia. Na przykład zobaczmy, co się stanie, gdy próbujemy wywołać nasze skrypty za pomocą obu L
I H
Opcje:
./test.sh -lh linuxconfig h oznacza h
Jak możemy zauważyć, obie opcje zostały przetworzone, w kolejności im zapewniliśmy. Z przekleństwa opcje można podać osobno, a my możemy również dodać A
opcja, ale zawsze pamiętam, aby dodać wymagany argument:
./test.sh -L -h -a Tux_rulez Linuxconfig H oznacza H Dostarczona wartość to Tux_rulez
Zmienna $ optind
Jeśli spojrzymy na bardzo trywialny skrypt, który napisaliśmy powyżej, widzimy kolejną instrukcję na końcu pętli While: Shift $ (($ optind -1))
. Jaki jest jego cel? Powiedzmy, że w ten sposób nazywamy scenariusz:
./test.sh -l -h -a hello świat
Po wywołaniu skryptu, $ Optind
Zmienna jest ustawiona na 1 i jest zwiększana za każdym razem, gdy opcja jest analizowana, dopóki nie osiągnie ostatniego. Dlatego w tym przypadku będzie miał wartość 5, gdy dotrze do ostatniego elementu, czyli Witam
, obowiązkowy argument wymagany przez -A
opcja.
zmiana
jest wbudowaną skorupą, która przesuwa parametry pozycyjne skryptu w dół określonej liczby podanych mu jako liczba dodatnich, odrzucając powiązane argumenty.
Sposób, w jaki uruchomiliśmy powyższy skrypt, ostatni podany argument „świat”, nie jest przeanalizowany przez getopts
, który w tym momencie już zakończył swoją pracę.
Teraz, jeśli dokonamy zmiany wartości $ Optind - 1
(To jest efektywna liczba opcji przeanalizowanych, 4 W tym przypadku) w parametrach pozycyjnych, to, co pozostaje, to tylko argumenty, które nie są opcjami, w tym przypadku „świat”, do których możemy uzyskać dostęp, korzystając $*
Zmienna później w tym skrypcie.
Powiązane samouczki Linux:
- Skrypt bash: Wykorzystanie flag z przykładami argumentów
- Rzeczy do zainstalowania na Ubuntu 20.04
- Jak wykonywać operacje administracyjne z Ansible…
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Polecenia Linux: Top 20 najważniejsze polecenia, które musisz…
- Podstawowe polecenia Linux
- Linux Pliki konfiguracyjne: Top 30 Najważniejsze
- Pobierz Linux
- Jak wydrukować drzewo katalogu za pomocą Linux
- Czy Linux może uzyskać wirusy? Badanie podatności Linuksa…