Jak używać polecenia read w systemie Linux
Czasami podczas interakcji z systemem Linux może zaistnieć potrzeba poproszenia użytkowników o wprowadzenie danych lub odczytanie danych z plików, a nawet ustawienia limitów czasu. Te zadania i wiele innych można wykonać za pomocą polecenia read
i jego różnych opcji.
W tym artykule nauczysz się podstaw read
poleceń i ich opcji, korzystając z licznych przykładów kodu.
Czym jest polecenie Read
W systemie Linux możesz użyć polecenia, read
aby przechwycić dane wejściowe użytkownika lub odczytać wiersz ze standardowego wejścia (stdin). To polecenie odczytuje całkowitą liczbę bajtów z podanego deskryptora pliku i przechowuje je w buforze. Następnie zwraca liczbę odczytanych bajtów, zero lub błąd.
Na przykład, jeśli liczba lub licznik wynosi zero, odnosi się do końca pliku. Ale w przypadku powodzenia zwraca liczbę odczytanych bajtów. Jeśli polecenie read znajdzie jakieś błędy, zwraca -1.
Zanim przyjrzymy się opcjom polecenia read, przyjrzyjmy się najpierw składni polecenia read:
Tutaj options
parametr określa różne flagi, które są używane do modyfikowania zachowania polecenia read. Ponadto parametr name
określa nazwy wielu zmiennych, które są używane do przechowywania danych wejściowych. Jeśli nie podano żadnych nazw, dane wejściowe są zachowywane w $REPLY
zmiennej bash.
Opcje polecenia Odczyt
Polecenie Bash read ma wiele opcji kontrolowania danych wprowadzanych przez użytkownika. Niektóre opcje nie wymagają dodatkowych parametrów, podczas gdy inne tak.
Przyjrzyjmy się niektórym opcjom, których możemy użyć z poleceniem read:
Opcje | Opisy |
---|---|
-a <tablica> | Przechowuje dane wejściowe w postaci tablicy, a nie oddzielnych zmiennych. |
-S | Działa w trybie cichym, co oznacza, że dane wejściowe nie są wyświetlane na terminalu |
-To jest | włącza obsługę biblioteki readline, umożliwiając odczytanie wiersza wejściowego |
-i <prefiks> | zapewnia początkową wartość wejściową, która pojawia się w monicie podczas korzystania z readline |
-p <monit> | wyświetla określony monit przed odczytaniem danych wejściowych |
-u <deskryptor pliku> | odczytuje z określonego deskryptora pliku, a nie ze standardowego wejścia (stdin) |
-d <rozgranicznik> | pozwala określić ogranicznik wiersza wejściowego zamiast domyślnego znaku nowej linii |
-t <czas> | ustawia okres limitu czasu dla danych wejściowych; jeśli dane wejściowe nie zostaną odebrane w tym czasie, read zwraca błąd |
-R | jeśli ustawione, ukośniki odwrotne nie są traktowane jako znaki specjalne |
-n <liczba> | odczytuje tylko określoną liczbę znaków |
Wpisz następujące polecenie, aby wyświetlić menu pomocy polecenia odczytu:
Jak odczytać dane wejściowe za pomocą polecenia Read
Najprostszym sposobem użycia polecenia read jest użycie go bez żadnych argumentów lub opcji. Kiedy wykonujesz polecenie read samo, zostaniesz poproszony o podanie danych wejściowych, które chcesz odczytać. Po podaniu danych wejściowych, polecenie zakończy działanie i zapisze je w swojej domyślnej zmiennej o nazwie REPLY
.
Weźmy to jako przykład:
Teraz, po wprowadzeniu danych, wyświetlmy je za pomocą polecenia echo:
Podczas odczytywania wartości wejściowej możesz również zapisać ją w dowolnych innych określonych zmiennych. Na przykład, aby zapisać wynik w zmiennej, wpisz polecenie, read
a następnie nazwę zmiennej:
Teraz, aby wyświetlić wynik, należy użyć polecenia echo
ze zmienną przechowującą wartość:
Odczyt wielu wartości
Nie ma bezpośredniego sposobu na odczytanie wielu wartości za pomocą read
polecenia. Możesz jednak podzielić pojedyncze zdanie wejściowe na wiele słów i zapisać je w różnych zmiennych.
Rozważmy następujący przykład:
Tutaj przechowujesz pierwsze słowo zdania w pierwszej zmiennej, drugie słowo w drugiej zmiennej i wszystkie pozostałe słowa w ostatniej podanej zmiennej.
Zwróćmy dane wyjściowe za pomocą następującego polecenia:
Odczyt z pliku
Podczas gdy read jest głównie do wprowadzania danych przez użytkownika, możesz go również użyć do odczytu wierszy z pliku. Aby to zrobić, po prostu użyj pętli while
, echo
polecenia i read
polecenia, a następnie określonej nazwy zmiennej:
Tutaj while
pętla odczytuje każdy wiersz pliku „samplefile.txt” i zapisuje go w zmiennej line
. Po odczytaniu wszystkich wierszy pliku echo
polecenie wyświetla wartość wiersza.
Odczyt danych wejściowych w pętli
Możesz również przechwycić dane wejściowe użytkownika w powtarzanej sekwencji, używając odczytu z pętlą while. Jest to przydatne, gdy chcesz zebrać wiele danych wejściowych lub kontynuować, aż zostanie spełniony określony warunek.
Na przykład, odczytajmy wiele danych wejściowych i wyświetlmy je na terminalu:
Co więcej, pętla będzie kontynuowana do momentu otrzymania sygnału końca pliku (EOF), zazwyczaj po naciśnięciu klawisza Ctrl+ D.
Jak wywołać monit o wprowadzenie danych za pomocą polecenia Read
Możesz również tworzyć interaktywne monity, które będą wyświetlane przed wprowadzeniem danych przez użytkownika. Możesz to osiągnąć, używając opcji -p
wraz z poleceniem read.
Wyświetlmy niestandardowy monit i przechwyćmy dane wejściowe:
Ograniczanie wprowadzania danych przez użytkownika podczas czytania
Chcesz kontrolować, co użytkownicy mogą wprowadzać? Użyj -n
opcji z read, aby określić żądaną długość znaków. Na przykład, jeśli chcesz przechwycić pierwsze 4 znaki wprowadzone przez użytkownika, użyj poniższego polecenia:
Po wykonaniu powyższego polecenia, pozwala ono na wprowadzenie tylko dziewięciu znaków. Ograniczenie danych wprowadzanych przez użytkownika podczas czytania wyeliminuje potrzebę użycia ogranicznika, a także nie podzieli danych wprowadzanych na słowa.
Oddzielanie pól wyjściowych za pomocą IFS
Możesz użyć zmiennej Internal Field Separator (IFS) z poleceniem read, aby określić, jak podzielić dane wejściowe na osobne pola. Domyślnie IFS używa znaków odstępu (tabulator, nowa linia i spacja) jako separatorów pól. Możesz jednak dostosować IFS do swoich potrzeb.
Na przykład możesz określić wartość dwukropka (:) jako separator:
Za pomocą zmiennej IFS można przechwycić wiele wierszy danych wejściowych użytkownika i oddzielić je na podstawie wartości separatora.
Ustawianie limitu czasu odczytu
Możesz również skonfigurować limit czasu dla polecenia read za pomocą -t
opcji. Jest to przydatne, jeśli chcesz mieć pewność, że skrypt nie będzie polegał na danych wejściowych użytkownika przez długi czas.
Ustawmy 10-sekundowy limit czasu, korzystając z -t
opcji:
Jeśli użytkownik nie wpisze niczego w ciągu 10 sekund, skrypt kontynuuje wykonywanie.
Jak ukryć dane wejściowe użytkownika
Czasami możesz chcieć ukryć dane wejściowe użytkownika, np. podczas wprowadzania poufnych informacji, takich jak hasła. Możesz to osiągnąć, używając opcji -s
polecenia read:
Po zapisaniu hasła w określonej zmiennej możesz wyświetlić je w terminalu za pomocą polecenia echo
:
W tym przypadku -e
flaga pozwala na interpretację sekwencji wyjścia, a \n
sekwencja wyjścia dodaje nowy wiersz przed wyjściem.
Podsumowanie
Kiedy skończysz czytać ten artykuł i przerabiać przykłady, będziesz zaznajomiony z używaniem polecenia read w terminalu Linux. Jest jednak kilka innych poleceń do zbadania. Czytaj dalej, aby poznać podstawowe polecenia dla nowicjuszy.
Źródło obrazu: Gabriel Heinzer przez Unsplash . Wszystkie zrzuty ekranu autorstwa Haroon Javed.
Dodaj komentarz