Jak używać polecenia read w systemie Linux

Jak używać polecenia read w systemie Linux
Odczytaj obraz funkcji polecenia

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 readi jego różnych opcji.

W tym artykule nauczysz się podstaw readpoleceń i ich opcji, korzystając z licznych przykładów kodu.

Czym jest polecenie Read

W systemie Linux możesz użyć polecenia, readaby 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 optionsparametr określa różne flagi, które są używane do modyfikowania zachowania polecenia read. Ponadto parametr nameokreś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 $REPLYzmiennej 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:

używanie polecenia read do przechwytywania danych wejściowych od użytkownika

Teraz, po wprowadzeniu danych, wyświetlmy je za pomocą polecenia echo:

użycie polecenia echo do wyświetlenia wyniku zmiennej REPLY

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, reada następnie nazwę zmiennej:

odczytywanie wartości wprowadzonej przez użytkownika i przechowywanie jej w określonej zmiennej

Teraz, aby wyświetlić wynik, należy użyć polecenia echoze zmienną przechowującą wartość:

wyświetlanie wartości zmiennej przechwyconej za pomocą polecenia echo

Odczyt wielu wartości

Nie ma bezpośredniego sposobu na odczytanie wielu wartości za pomocą readpolecenia. 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:

odczytywanie wielu wartości i zapisywanie ich w wielu zmiennych

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:

wyświetlanie wielu wartości za pomocą polecenia echo

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, echopolecenia i readpolecenia, a następnie określonej nazwy zmiennej:

odczyt z pliku za pomocą polecenia read

Tutaj whilepętla odczytuje każdy wiersz pliku „samplefile.txt” i zapisuje go w zmiennej line. Po odczytaniu wszystkich wierszy pliku echopolecenie 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:

odczytywanie wartości wejściowej od użytkownika w pętli ciągłej

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 -pwraz z poleceniem read.

Wyświetlmy niestandardowy monit i przechwyćmy dane wejściowe:

tworzenie monitu przed odczytaniem danych wejściowych od użytkownika

Ograniczanie wprowadzania danych przez użytkownika podczas czytania

Chcesz kontrolować, co użytkownicy mogą wprowadzać? Użyj -nopcji 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:

odczytywanie danych wejściowych na podstawie określonej wartości znaku

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:

odczytywanie i dzielenie wartości na podstawie podanej wartości ogranicznika

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ą -topcji. 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 -topcji:

odczytanie wartości wejściowej w podanym czasie

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 -spolecenia read:

używanie opcji -s z poleceniem read w celu ukrycia informacji

Po zapisaniu hasła w określonej zmiennej możesz wyświetlić je w terminalu za pomocą polecenia echo:

wyświetlanie przechwyconego hasła za pomocą opcji -e i polecenia echo

W tym przypadku -eflaga pozwala na interpretację sekwencji wyjścia, a \nsekwencja 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

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *