Dane wejściowe od użytkownika w skryptach
Część sekcji Podstawy ścieżki Terminal w Coddy. Lekcja 69 z 82.
Zmienne są przydatne, ale czasami chcesz, aby Twój skrypt pytał użytkownika o informacje podczas działania. Polecenie read wstrzymuje skrypt i czeka, aż użytkownik coś wpisze, a następnie zapisuje te dane wejściowe w zmiennej.
Oto jak to działa:
#!/bin/bash
echo "What is your name?"
read name
echo "Hello, $name!"Po uruchomieniu ten skrypt wyświetla pytanie, czeka, aż użytkownik wpisze swoje imię i naciśnie Enter, a następnie wita go. Polecenie read pobiera wszystko, co wpisze użytkownik, i zapisuje to w zmiennej name.
Możesz uprościć prompt, używając flagi -p, która łączy komunikat promptu i dane wejściowe w tym samym wierszu:
#!/bin/bash
read -p "Enter your name: " name
echo "Hello, $name!"Wyświetla Enter your name: i czeka na dane wejściowe w tym samym wierszu, co wygląda bardziej estetycznie. Flaga -p przyjmuje tekst podpowiedzi jako argument, po którym następuje nazwa zmiennej, w której zostaną zapisane dane wejściowe.
Dane wejściowe użytkownika sprawiają, że skrypty są interaktywne i elastyczne. Zamiast wpisywać wartości na stałe, możesz napisać jeden skrypt, który działa inaczej w zależności od tego, co użytkownik podaje za każdym razem, gdy go uruchamia.
Wyzwanie
ŁatwyUtwórz skrypt powłoki o nazwie greeter.sh, który pyta użytkownika o jego ulubiony kolor, a następnie wyświetla wiadomość z użyciem podanego przez niego tekstu.
Twój skrypt powinien:
- Zaczynać się od wiersza shebang (
#!/bin/bash) - Używać
readz flagą-p, aby wyświetlić pytanie:What is your favorite color? - Zapisywać dane wejściowe w zmiennej o nazwie
color - Używać
echo, aby wyświetlić:Nice! [color] is a great color!(gdzie [color] to dane wprowadzone przez użytkownika)
Nadaj skryptowi uprawnienia do wykonywania, a następnie uruchom go, podając blue jako dane wejściowe. Ten terminal nie jest interaktywny — nie może się zatrzymać i czekać, aż coś wpiszesz, więc przekaż odpowiedź do skryptu za pomocą potoku:
echo "blue" | ./greeter.shWynik powinien wyglądać tak:
Nice! blue is a great color!Uwaga: pytanie
What is your favorite color?nie jest tu wyświetlane.read -pwyświetla swój tekst zachęty tylko wtedy, gdy dane wejściowe pochodzą z klawiatury, a tutaj pochodzą z potoku.
Każdy wpisywany wiersz ujmij w apostrofy:
echo 'echo "Hello $name"' >> script.sh. Apostrofy powstrzymują powłokę przed zastąpieniem$namepodczas zapisywania pliku, dzięki czemu skrypt zachowuje zmienną i rozwija ją podczas uruchamiania. Cudzysłowy spowodowałyby podstawienie wartości od razu.
Podpowiedź: Twórz skrypt wiersz po wierszu, używając
echoz przekierowaniem. Użyjread -p "What is your favorite color? " color, aby wyświetlić pytanie i pobrać dane wejściowe, a następnieecho "Nice! $color is a great color!", aby wyświetlić wynik.
Spróbuj swoich sił
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Katalogi
Utwórz katalogSkopiuj katalogPrzenieś i zmień nazwę kataloguUsuń katalogPodsumowanie — operacje na katalogach7Zawartość plików
Początek i koniecLiczba słówPolecenie sortPolecenie uniqPodstawy grepgrep z opcjamiPowtórka – detektyw tekstu10Projekt analizatora logów
Przegląd projektuPrzeglądanie pliku logów13Podstawy skryptów powłoki
Czym jest skrypt powłokiTworzenie i uruchamianie skryptuZmienne w skryptachDane wejściowe od użytkownika w skryptachInstrukcja warunkowa ifPętla forPętla whilePodsumowanie — zgadywanie liczby2Nawigacja
Wyświetlanie bieżącego kataloguWyświetlanie plikówZmiana kataloguŚcieżki bezwzględne i względneKatalog domowy i głównyPowtórka — znajdź drogę8Przekierowywanie
Standardowe wyjścieNadpisywanie plikuDopisywanie do plikuStandardowe wejścieStandardowe wyjście błędówPodsumowanie — tworzenie dziennika3Pliki
Utwórz plikOdczytaj plikSkopiuj plikPrzenieś i zmień nazwę plikuUsuń plikPodsumowanie — operacje na plikach6Symbole wieloznaczne i wzorce
Symbol wieloznaczny gwiazdkaSymbol wieloznaczny znak zapytaniaSymbole wieloznaczne w nawiasachŁączenie symboli wieloznacznychPowtórka — operacje selektywne9Potoki
Czym jest potokŁączenie dwóch poleceńŁączenie wielu poleceńPotok z grepPodsumowanie – potok danychPoćwicz samodzielnie: Edytor online Terminal