Hoe de read-opdracht in Linux te gebruiken

Hoe de read-opdracht in Linux te gebruiken
Leesopdracht Functie Afbeelding

Soms moet u tijdens de interactie met uw Linux-systeem gebruikers om invoer vragen of invoer van bestanden lezen, of zelfs time-outs instellen. U kunt deze taken en vele andere uitvoeren met de readopdracht en de verschillende opties.

In dit artikel leert u de basisbeginselen van readcommand en de bijbehorende opties aan de hand van talloze codevoorbeelden.

Wat is de Leesopdracht?

In Linux kunt u de readopdracht gebruiken om gebruikersinvoer vast te leggen of een regel van de standaardinvoer (stdin) te lezen. Deze opdracht leest het totale aantal bytes van de gegeven bestandsdescriptor en slaat deze op in de buffer. Daarna retourneert het het aantal gelezen bytes, nul of een fout.

Bijvoorbeeld, als het nummer of de telling nul is, verwijst het naar het einde van het bestand. Maar bij succes retourneert het het aantal gelezen bytes. Als de read-opdracht fouten vindt, retourneert het -1.

Voordat we de opties voor de opdracht read verkennen, kijken we eerst naar de syntaxis van de opdracht read:

Hier optionsspecificeert de parameter verschillende vlaggen die worden gebruikt om het gedrag van de read-opdracht te wijzigen. Verder namespecificeert de parameter de naam van meerdere variabelen die worden gebruikt om de invoer op te slaan. Als er geen namen worden opgegeven, wordt de invoer bewaard in de $REPLYbash-variabele.

Leesopdrachtopties

De Bash read-opdracht heeft veel opties om gebruikersinvoer te regelen. Sommige opties hebben geen extra parameters nodig, terwijl andere dat wel hebben.

Laten we eens kijken naar enkele opties die we kunnen gebruiken met de opdracht read:

Opties Beschrijvingen
-een <array> De invoer wordt opgeslagen als een array in plaats van als afzonderlijke variabelen.
-S Werkt stil, wat betekent dat de invoer niet op de terminal wordt weergegeven
-Het is maakt readline-bibliotheekondersteuning mogelijk, waardoor de invoerregel kan worden gelezen
-i <voorvoegsel> biedt een initiële invoerwaarde die bij de prompt verschijnt bij gebruik van readline
-p <aanwijzing> geeft de opgegeven prompt weer voordat de invoer wordt gelezen
-u <bestandsdescriptor> leest van een opgegeven bestandsdescriptor in plaats van de standaardinvoer (stdin)
-d <scheidingsteken> Hiermee kunt u een scheidingsteken voor de invoerregel opgeven in plaats van het standaard teken voor een nieuwe regel
-t <tijd> stelt een time-outperiode in voor invoer; als de invoer niet binnen deze tijd wordt ontvangen, retourneert read een fout
-R wanneer ingesteld, worden backslashes niet behandeld als escape-tekens
-n <nummer> leest alleen het opgegeven aantal tekens

Typ de volgende opdracht om het helpmenu voor leesopdrachten weer te geven:

Hoe invoer te lezen met behulp van de opdracht Lezen

De eenvoudigste manier om de read-opdracht te gebruiken is om deze te gebruiken zonder argumenten of opties. Wanneer u de read-opdracht alleen uitvoert, wordt u gevraagd om de invoer te geven die u wilt lezen. Nadat u invoer hebt gegeven, wordt de opdracht afgesloten en opgeslagen in de standaardvariabele met de naam REPLY.

Laten we dit als voorbeeld nemen:

met behulp van de opdracht read om invoer van de gebruiker vast te leggen

Nadat u de invoer hebt ingevoerd, geven we deze weer met de echo-opdracht:

met behulp van de echo-opdracht om de uitvoer van de REPLY-variabele weer te geven

Terwijl u de invoerwaarde leest, kunt u deze ook opslaan in andere specifieke variabelen. Om bijvoorbeeld het resultaat in een variabele op te slaan, typt u de readopdracht gevolgd door de variabelenaam:

het lezen van de invoerwaarde van de gebruiker en het opslaan ervan in een specifieke variabele

Om het resultaat weer te geven, moet u de echoopdracht gebruiken met de variabele waarin uw waarde is opgeslagen:

weergave van de vastgelegde variabele waarde met behulp van de echo-opdracht

Meerdere waarden lezen

Er is geen directe manier om meerdere waarden te lezen met behulp van de readopdracht. U kunt echter de enkele invoerzin opsplitsen in meerdere woorden en deze opslaan in verschillende variabelen.

Laten we het volgende voorbeeld eens bekijken:

meerdere waarden lezen en opslaan in meerdere variabelen

Hierbij slaat u het eerste woord van de zin op in de eerste variabele, het tweede woord in de tweede variabele en alle overige woorden in de laatst opgegeven variabele.

Laten we de uitvoer retourneren met de volgende opdracht:

meerdere waarden weergeven met behulp van de echo-opdracht

Lezen vanuit een bestand

Hoewel read primair bedoeld is voor gebruikersinvoer, kunt u het ook gebruiken om regels uit een bestand te lezen. Om dit te doen, gebruikt u gewoon de whileloop, echocommand en readcommand gevolgd door een specifieke variabelenaam:

lezen uit bestand met behulp van de opdracht read

Hier whileleest de lus elke regel van de “samplefile.txt” en registreert deze in de variabele line. Nadat alle regels van een bestand zijn gelezen, echotoont de opdracht de waarde van de regel.

Invoer lezen in een lus

U kunt ook gebruikersinvoer in een herhaalde reeks vastleggen door een read met een while-lus te gebruiken. Dit is handig wanneer u meerdere invoeren wilt verzamelen of wilt doorgaan totdat aan een specifieke voorwaarde is voldaan.

Laten we bijvoorbeeld meerdere invoergegevens lezen en deze ook op de terminal weergeven:

invoerwaarde van gebruiker in continue lus lezen

Bovendien blijft de lus doorgaan totdat er een EOF-signaal (end-of-file) wordt ontvangen, meestal door op Ctrl+ te drukken D.

Hoe u invoer kunt vragen met behulp van de opdracht Lezen

U kunt ook interactieve prompts maken die worden weergegeven vóór de invoer van de gebruiker. U kunt dit doen door de -poptie te gebruiken in combinatie met de opdracht read.

Laten we een aangepaste prompt weergeven en ook de invoer vastleggen:

prompt maken voordat invoer van gebruiker wordt gelezen

Beperking van gebruikersinvoer tijdens het lezen

Wilt u bepalen wat gebruikers kunnen invoeren? Gebruik de -noptie met read om de gewenste tekenlengte op te geven. Als u bijvoorbeeld de eerste 4 tekens van de gebruikersinvoer wilt vastleggen, gebruikt u de onderstaande opdracht:

invoer lezen op basis van de opgegeven tekenwaarde

Nadat u de bovenstaande opdracht hebt uitgevoerd, kunt u slechts negen tekens invoeren. Door de invoer van de gebruiker tijdens het lezen te beperken, vervalt de noodzaak voor een scheidingsteken en wordt de invoer ook niet in woorden gesplitst.

Uitvoervelden scheiden met IFS

U kunt de variabele Internal Field Separator (IFS) gebruiken met de opdracht read om te bepalen hoe de invoer in afzonderlijke velden moet worden gesplitst. Standaard gebruikt IFS witruimtetekens (tab, nieuwe regel en spatie) als veldscheidingstekens. U kunt IFS echter aanpassen aan uw behoeften.

U kunt bijvoorbeeld de dubbele punt (:) als scheidingsteken opgeven:

lezen en splitsen van de waarde op basis van de opgegeven scheidingstekenwaarde

Met de variabele IFS kunt u meerdere regelinvoeren van de gebruiker vastleggen en deze scheiden op basis van de scheidingswaarde.

Time-out instellen bij lezen

U kunt ook een time-out configureren voor de read-opdracht met behulp van de -toptie. Dit is handig als u ervoor wilt zorgen dat het script niet langdurig afhankelijk is van gebruikersinvoer.

Laten we een time-out van 10 seconden instellen met de -toptie:

invoerwaarde binnen de gegeven tijd lezen

Als de gebruiker binnen 10 seconden niets typt, gaat het script verder met de uitvoering.

Hoe u gebruikersinvoer kunt verbergen

Soms wilt u de invoer van de gebruiker verbergen, bijvoorbeeld bij het invoeren van gevoelige informatie zoals wachtwoorden. U kunt dit bereiken met de -soptie van de opdracht read:

Gebruik de optie -s met de opdracht read om informatie te verbergen

Nadat u het wachtwoord in de opgegeven variabele hebt opgeslagen, kunt u het in de terminal weergeven met behulp van de echoopdracht:

het weergeven van het vastgelegde wachtwoord met behulp van de optie -e en de opdracht echo

Hier -estaat de vlag de interpretatie van escape sequences toe en \nescape sequence voegt een nieuwe regel toe vóór de uitvoer.

Afsluiten

Tegen de tijd dat u klaar bent met het lezen van dit artikel en het doorwerken van de voorbeelden, bent u bekend met het gebruik van de read-opdracht in de Linux-terminal. Er zijn echter nog een aantal opdrachten om te verkennen. Lees verder om de basisopdrachten voor nieuwkomers te ontdekken.

Afbeelding tegoed: Gabriel Heinzer via Unsplash . Alle screenshots door Haroon Javed.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *