Jak utworzyć menu wyboru za pomocą instrukcji Wybierz w Bash Shell
- 3529
- 218
- Maria Piwowarczyk
Wszyscy bardzo często używamy skryptów bash do automatyzacji nudnych i powtarzających się zadań. Czasami w naszych skryptach musimy zapytać
Użytkownik, aby interaktywnie dokonać jednego lub więcej opcji: W tym samouczku zobaczymy, jak użyć instrukcji Bash Shell Select, aby wykonać taką operację w bardzo kilku wierszach kodu.
W tym samouczku nauczysz się:
- Jak korzystać z instrukcji Bash Select
- Jak dostosować monit menu Wybierz
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od rozkładu |
Oprogramowanie | Powłoka bash |
Inny | Bez specjalnych wymagań |
Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane 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 |
Wybierz instrukcję
Skrypty jest jedną z najczęstszych umiejętności, które powinien posiadać administrator systemu, aby zautomatyzować powtarzalne
zadania i uczyń je mniej podatnymi na błędy. W niezbyt skomplikowanych przypadkach powłoka jest idealnym narzędziem do użycia do pracy. Bash, The Bourne ponownie Shell, jest najczęściej używaną skorupą w świecie GNU/Linux. Ta powłoka zapewnia bardzo przydatne wybierać
oświadczenie. Jego cel jest opisany w następujący sposób:
Wybierz słowa z listy i wykonaj polecenia
Opis jest dość oczywisty. Instrukcja pozwala nam interaktywnie odbierać dane wejściowe od użytkownika, generując ponumerowaną listę opcji i zachęcając go do wybrania jednego. Zobaczmy, jak jest używany:
Wybierz nazwę [W słowa…;] DO Polecenia; zrobione
Składnia jest bardzo podobna do składni tradycyjnej dla pętli
w Bash, z wyjątkiem użycia wybierać
Słowo kluczowe. Wybierz instrukcję działa jednak w inny sposób. Zobaczmy przykład. Załóżmy, że chcemy poprosić użytkownika o wybranie jednego z plików zawartych w katalogu. Oto, co moglibyśmy napisać:
$ files = "$ (ls -a .) „$ Wybierz nazwę pliku w $ pliki; do echo” $ plik ”; Done 1) File1 2) File2 3) File3 #?
Wyjaśnijmy, co zrobiliśmy. Przede wszystkim uzyskaliśmy listę wszystkich plików obecnych w katalogu (w tym przypadku bieżącego katalogu roboczego) za pomocą LS
polecenie i określenie -A
opcja (skrót --prawie wszystko
), aby wykluczyć dorozumiane .
I …
z zwróconej listy, którą przypisaliśmy do akta
zmienny.
Następnie przystąpiliśmy do korzystania z wybierać
oświadczenie. Powyższe jest bardzo podstawowym przykładem: zapewniliśmy wynik rozszerzenia plik
zmienna jako lista wyborów, które należy uwzględnić. Zauważ, że uniknęliśmy cytowania rozszerzenia $ pliki
celowo, aby uzyskać dzielenie słów: Gdy rozszerzenie jest cytowane z podwójnymi cytatami dzielenie słów jest tłumiony, więc przestrzenie nie są używane jako delimitory słów, a wynik ekspansji jest uważany za całość. W tym przypadku nie chcemy: potrzebujemy każdego słowa, aby być używane jako wybór w wygenerowanym menu.
Słowa uzyskane z rozszerzenia zmiennej są wydrukowane na Stderr
(Standardowy błąd). Każdy z nich jest poprzedzony i powiązany z liczbą, czego użytkownik użyje, aby odwołać się do niego. Po wyświetleniu wszystkich elementów użytkownik jest poproszony o wprowadzenie swojego wyboru. To, co jest wyświetlane, to PS3
monit, który domyślnie jest ustawiony #?
.
Co się stanie, gdy użytkownik wykonuje wybór? Zobaczmy:
$ files = "$ (ls -a .) „$ Wybierz nazwę pliku w $ pliki; do echo” Wybrałeś $ fileName ”; Done 1) File1 2) File2 3) File3 #? 1 Wybrałeś plik 1 #?
Wybór, do którego weszliśmy, 1
, jest czytany z stdin
(Standardowe wejście), a jeśli wprowadzony numer jest jednym z dostępnych, odpowiednie słowo („Plik 1” w przykładzie) jest przypisane do,Nazwa pliku
zmienny. W naszym przykładzie określiliśmy echo "$ nazwa pliku"
jako polecenie, które ma być wykonane po wykonaniu wyboru: W rezultacie: wybrane słowo jest drukowane na ekranie. Liczba, którą wprowadzamy, aby określić nasz wybór, jest również przechowywany w zmiennej: ODPOWIEDŹ
.
Możesz zauważyć dziwną rzecz, jaką wydarzyło się w powyższym przykładzie: kiedy dokonaliśmy naszego wyboru, po wykonaniu polecenia zostaliśmy ponownie poproszeni o wybór, dlaczego? Stało się to, ponieważ nie dostarczyliśmy przerwa
Komenda. Możemy to łatwo naprawić:
$ files = "$ (ls -a .) „$ Wybierz nazwę pliku w $ pliki; do echo” Wybrałeś $ fileName ”; break; dision 1) plik1 2) plik2 3) plik3 #? 1 Wybrałeś plik 1
Co jeśli nie zapewnimy żadnego wyboru? Monitu jest po prostu powtarzany, dopóki nie zrobimy:
Wybierz nazwę pliku w $ Files; echo „Wybrałeś $ filename”; przerwa; Dane 1) Plik1 2) Plik2 3) Plik3 #? 1) File1 2) Plik2 3) Plik3 #?
Co jeśli wprowadzimy numer, którego zamiast tego nie ma na liście? W takim przypadku zmienna, której używamy, nazwa pliku w naszym przypadku jest ustawiona zero
.
Zmiana monitu wyboru
Jak już widzieliśmy, monit używany przez powłokę w kontekście instrukcji wybranej jest PS3
monit, który domyślnie ma #?
String ma wartość. To nie jest zbyt przyjazne dla użytkownika, więc możemy chcieć go zmienić i zamiast tego użyć czegoś bardziej opisowego. Jak możemy to zrobić? Bardzo proste: musimy zmienić wartość PS3
parametr:
$ Ps3 = "Wprowadź swój wybór:"
Następnym razem użyjemy wybierać
Oświadczenie, zauważymy zmianę:
Wybierz nazwę pliku w $ Files; echo "Wybrałeś $ filename $ odpowiedź"; przerwa; Dane 1) File1 2) Plik2 3) Plik3 Wprowadź swój wybór:
Zmiana dokonana na zmienną będzie skuteczna tylko dla bieżącej sekcji powłoki, a jeśli my eksport
Zmienna, także we wszystkich jej dzieciach:
$ Export PS3 = "Wprowadź swój wybór:"
Zmiana pozostaje jednak tymczasowa, dopóki nie ustanowimy PS3
zmienna wewnątrz .Bashrc
plik. PS3 to tylko jedna z podpowiedzi używanych w BASH: Sprawdź nasz artykuł Bash, jeśli chcesz dowiedzieć się więcej na ten temat.
Wnioski
W tym samouczku nauczyliśmy się używać bash wybierać
oświadczenie. Widzieliśmy, jak to działa i jak możemy go użyć do utworzenia menu wyboru, aby interaktywnie poprosić użytkownika o wykonanie wyboru. Wreszcie widzieliśmy, jak dostosować monit wyświetlany w menu wyboru, modyfikując powłokę PS3
parametr.
Powiązane samouczki Linux:
- Mastering Bash Script Loops
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Zagnieżdżone pętle w skryptach Bash
- Rzeczy do zainstalowania na Ubuntu 20.04
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
- Obsługa danych wejściowych użytkownika w skryptach Bash
- Samouczek debugowania GDB dla początkujących
- Hung Linux System? Jak uciec do wiersza poleceń i…
- Jak skonfigurować serwer OpenVPN na Ubuntu 20.04