Hoe de read-opdracht in Linux te gebruiken
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 read
opdracht en de verschillende opties.
In dit artikel leert u de basisbeginselen van read
command en de bijbehorende opties aan de hand van talloze codevoorbeelden.
Wat is de Leesopdracht?
In Linux kunt u de read
opdracht 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 options
specificeert de parameter verschillende vlaggen die worden gebruikt om het gedrag van de read-opdracht te wijzigen. Verder name
specificeert 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 $REPLY
bash-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:
Nadat u de invoer hebt ingevoerd, geven we deze weer met de echo-opdracht:
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 read
opdracht gevolgd door de variabelenaam:
Om het resultaat weer te geven, moet u de echo
opdracht gebruiken met de variabele waarin uw waarde is opgeslagen:
Meerdere waarden lezen
Er is geen directe manier om meerdere waarden te lezen met behulp van de read
opdracht. U kunt echter de enkele invoerzin opsplitsen in meerdere woorden en deze opslaan in verschillende variabelen.
Laten we het volgende voorbeeld eens bekijken:
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:
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 while
loop, echo
command en read
command gevolgd door een specifieke variabelenaam:
Hier while
leest de lus elke regel van de “samplefile.txt” en registreert deze in de variabele line
. Nadat alle regels van een bestand zijn gelezen, echo
toont 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:
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 -p
optie te gebruiken in combinatie met de opdracht read.
Laten we een aangepaste prompt weergeven en ook de invoer vastleggen:
Beperking van gebruikersinvoer tijdens het lezen
Wilt u bepalen wat gebruikers kunnen invoeren? Gebruik de -n
optie 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:
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:
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 -t
optie. 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 -t
optie:
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 -s
optie van de opdracht read:
Nadat u het wachtwoord in de opgegeven variabele hebt opgeslagen, kunt u het in de terminal weergeven met behulp van de echo
opdracht:
Hier -e
staat de vlag de interpretatie van escape sequences toe en \n
escape 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