Hoe de echo-opdracht op Linux te gebruiken
- Dave McKay
@TheGurkha
- 29 oktober 2019, 8:00 uur EDT
De echo
commando is perfect voor het schrijven van opgemaakte tekst naar het terminalvenster. En het hoeft geen statische tekst te zijn. Het kan shell-variabelen, bestandsnamen en mappen bevatten. U kunt de echo ook omleiden om tekstbestanden en logbestanden te maken. Volg deze eenvoudige gids om erachter te komen hoe.
Echo herhaalt wat je zegt te herhalen
Zeus verliet graag de berg Olympus om met prachtige nimfen om te gaan. Op een reis vertelde hij een bergnimf genaamd Echo om zijn vrouw Hera te belazeren als ze hem volgde. Hera kwam Zeus zoeken en Echo deed er alles aan om Hera in gesprek te houden. Uiteindelijk verloor Hera haar geduld en vervloekte ze de arme Echo, zodat ze alleen de laatste woorden herhaalde die iemand anders had gezegd. Wat Hera Zeus heeft aangedaan toen ze hem inhaalde, is voor iedereen een raadsel.
En dat is vrijwel het lot van echo
’s leven. Het herhaalt wat is gezegd te herhalen. Dat is een eenvoudige functie, maar een essentiële. Zonder echo
zouden we bijvoorbeeld geen zichtbare uitvoer kunnen krijgen van shell-scripts.
Hoewel we niet beladen zijn met een veelvoud aan toeters en bellen, is de kans groot dat echo
een aantal mogelijkheden heeft die u niet wist of die u was vergeten.
echo? echo!
De meeste Linux-systemen bieden twee versies van echo
. De Bash-shell heeft zijn eigen echo
erin ingebouwd, en er is ook een binaire uitvoerbare versie van echo
.
We kunnen de twee verschillende versies zien door de volgende opdrachten te gebruiken:
type echo
whereis echo
De type
commando vertelt ons of het commando dat we eraan geven als zijn argument een ingebouwde shell, een binair uitvoerbaar bestand, een alias of een functie is. Het rapporteert ons dat echo
een ingebouwde shell is.
Zodra het een antwoord heeft gevonden, type
stopt met zoeken naar verdere overeenkomsten. Het vertelt ons dus niet of er andere commando’s met dezelfde naam in het systeem aanwezig zijn. Maar het vertelt ons welke het het eerst vindt. En dat is degene die standaard wordt gebruikt wanneer we dat commando geven.
Het whereis
commando zoekt naar het binaire uitvoerbare bestand, de broncode en de man-pagina voor de opdracht die we eraan geven als de opdrachtregelparameter. Het zoekt niet naar ingebouwde shell-ins, omdat ze geen afzonderlijk binair uitvoerbaar bestand hebben. Ze zijn een integraal onderdeel van het uitvoerbare bestand van Bash.
Het whereis
commando meldt dat echo
een binair uitvoerbaar bestand is bevindt zich in de /bin
directory.
Om die versie van echo
te gebruiken, moet je deze expliciet aanroepen door op te geven het pad naar het uitvoerbare bestand op de opdrachtregel:
/bin/echo --version
De ingebouwde shell weet niet wat de --version
opdrachtregelargument is, het herhaalt het gewoon in het terminalvenster:
echo --version
De hier getoonde voorbeelden gebruiken allemaal de standaard versie van echo
, in de Bash-shell.
Tekst naar de terminal schrijven
Om een eenvoudige reeks tekst naar het terminalvenster te schrijven , typ echo
en de string die u wilt weergeven:
echo My name is Dave.
De tekst wordt voor ons herhaald. Maar terwijl u experimenteert, zult u snel ontdekken dat de zaken iets gecompliceerder kunnen worden. Bekijk dit voorbeeld:
echo My name is Dave and I"m a geek.
Het terminalvenster toont een >
teken en zit daar te wachten. Ctrl + C brengt u terug naar de opdrachtprompt. Wat gebeurde daar?
Het enkele aanhalingsteken of de apostrof in het woord “I’m” confused echo
. Het interpreteerde dat enkele aanhalingsteken als het begin van een geciteerde sectie tekst. Omdat echo
geen enkel afsluitend aanhalingsteken detecteerde, wachtte echo
op meer invoer. Het verwachtte dat verdere invoer het ontbrekende enkele aanhalingsteken zou bevatten waarop het wachtte.
Om een enkel aanhalingsteken in een string op te nemen, is de eenvoudigste oplossing om de hele string tussen dubbele aanhalingstekens te plaatsen:
echo "My name is Dave and I"m a geek."
Uw tekst omwikkelen in dubbele aanhalingstekens is een goed algemeen advies. In scripts worden de parameters die u doorgeeft aan echo
duidelijk afgebakend. Dit maakt het lezen en debuggen van scripts veel gemakkelijker.
Wat als u een dubbel aanhalingsteken in uw tekstreeks wilt opnemen?Dat is eenvoudig, plaats gewoon een backslash \
voor het dubbele aanhalingsteken (zonder spatie ertussen).
echo "My name is Dave and I"m a \"geek.\""
Hierdoor wordt het woord “nerd” voor ons tussen dubbele aanhalingstekens geplaatst. We zullen binnenkort meer van deze backslash-escapetekens zien.
Variabelen gebruiken met echo
Tot nu toe , hebben we voorgedefinieerde tekst naar het terminalvenster geschreven. We kunnen variabelen gebruiken met echo
om uitvoer te produceren die dynamischer is en waar waarden in voor ons door de shell zijn ingevoegd. kan een eenvoudige variabele definiëren met dit commando:
my_name="Dave"
Een variabele genaamd my_name
is gemaakt. heeft de waarde van de tekst ‘Dave’ toegewezen. We kunnen de variabelenaam gebruiken in de strings die we doorgeven aan echo
, en de waarde van de variabele zal naar het terminalvenster worden geschreven. Je moet een dollarteken $
voor de variabelenaam plaatsen om echo
te laten weten dat het een variabele is.
Er is een voorbehoud. Als je je string tussen enkele aanhalingstekens hebt gewikkeld, zal echo
alles letterlijk behandelen. Gebruik dubbele aanhalingstekens om de waarde van de variabele weer te geven en niet de naam van de variabele.
echo "My name is $my_name"
echo "My name is $my_name"
Enigszins toepasselijk, dat is voor herhaling vatbaar:
- Het gebruik van enkele aanhalingstekens resulteert erin dat de tekst op een letterlijke manier naar het terminalvenster wordt geschreven.
- Het gebruik van dubbele aanhalingstekens resulteert in de variabele die wordt geïnterpreteerd – ook wel variabele expansie genoemd – en de waarde wordt naar het terminalvenster geschreven.
GERELATEERD: Hoe te werken met variabelen in Bash
Commando’s gebruiken met echo
We kunnen een commando gebruiken met echo
en zijn output opnemen in de string die naar het terminalvenster wordt geschreven. We moeten het dollarteken $
gebruiken alsof het een variabele is, en het hele commando tussen haakjes plaatsen.
We gaan het date commando gebruiken . Een tip is om het commando alleen te gebruiken voordat u het gaat gebruiken met echo
. Op die manier, als er iets mis is met de syntaxis van je commando, identificeer je het en corrigeer je het voordat je het opneemt in het echo
commando. Als de echo
-opdracht niet doet wat u verwacht, weet u dat het probleem te maken heeft met de echo
-syntaxis omdat u hebben de syntaxis van het commando al bewezen.
Dus, probeer dit in het terminalvenster:
date +%D
En, tevreden dat we om te krijgen wat we verwachten van het date commando, integreren we het in een echo
commando:
echo "Today"s date is: $(date +%D)"
Let op: de opdracht staat tussen haakjes en het dollarteken $
staat direct voor het eerste haakje.
Tekst opmaken met echo
Met de optie -e
(backslash-escapes inschakelen) kunnen we enkele backslash-escapetekens gebruiken om de lay-out van de tekst te wijzigen. Dit zijn de backslash-escapetekens die we kunnen gebruiken:
Laten we er een paar gebruiken en kijken wat ze doen.
echo -e "This is a long line of text\nsplit across three lines\nwith\ttabs\ton\tthe\tthird\tline"
De tekst wordt opgesplitst in een nieuwe regel waar we de \n
-tekens hebben gebruikt en een tab wordt ingevoegd waar we de \t
-tekens hebben gebruikt.
echo -e "Here\vare\vvertical\vtabs"
Net als de \n
tekens voor nieuwe regels, een verticale tab \v
verplaatst de tekst naar de regel eronder. Maar in tegenstelling tot de \n
tekens voor nieuwe regels, begint het verticale tabblad \v
de nieuwe regel niet bij kolom nul. Het gebruikt de huidige kolom.
De \b
backspace-tekens verplaatsen de cursor één teken terug. Als er meer tekst naar de terminal moet worden geschreven, zal die tekst het vorige teken overschrijven.
echo -e "123\b4"
De “3” wordt overschreven door de ” 4 ”.
Het \r
regeleinde-teken zorgt ervoor dat echo
terugkeert naar het begin van de huidige regel en naar schrijf verdere tekst uit kolom nul.
echo -e "123\r456"
De “123” tekens worden overschreven door de “456” tekens.
De \a
waarschuwingsteken zal een hoorbare “piep” produceren. Het gebruikt het standaard waarschuwingsgeluid voor uw huidige thema.
echo -e "Make a bleep\a"
De -n
(geen nieuwe regel) optie is geen sequentie met backslash-escapecodes, maar heeft wel invloed op de vormgeving van de tekstlay-out, dus we zullen het hier bespreken. Het voorkomt dat echo
toevoegt een nieuwe regel aan het einde van de tekst De opdrachtprompt verschijnt direct na de tekst die naar het terminalvenster wordt geschreven.
echo -n "no final newline"
Echo gebruiken met bestanden en mappen
U kunt echo
gebruiken als van de arme man-versie van ls
. Uw opties zijn zeldzaam als u echo
op deze manier gebruikt. Als je enige vorm van betrouwbaarheid of nauwkeurige controle nodig hebt, kun je beter ls
en zijn legioen aan opties gebruiken.
Dit commando geeft een overzicht van alle bestanden en mappen in de huidige map:
echo *
Dit commando geeft een overzicht van alle bestanden en mappen in de huidige map waarvan de naam begint met “D”:
echo D*
Deze opdracht geeft een overzicht van alle “.desktop” -bestanden in de huidige directory:
echo *.desktop
Ja. Dit speelt niet in op de sterke punten van echo
. Gebruik ls
.
Schrijven naar bestanden met echo
We kunnen de uitvoer omleiden van echo
en maak tekstbestanden of schrijf in bestaande tekstbestanden.
Als we de >
omleidingsoperator gebruiken, wordt het bestand gemaakt als het niet bestaat. Als het bestand bestaat, wordt de uitvoer van echo
toegevoegd aan het begin van het bestand, waarbij alle eerdere inhoud wordt overschreven.
Als we de >>
omleidingsoperator, het bestand wordt gemaakt als het niet bestaat. De uitvoer van echo
wordt toegevoegd aan het einde van het bestand en overschrijft geen bestaande inhoud van het bestand.
echo "Creating a new file." > sample.txt
echo "Adding to the file." >> sample.txt
cat sample.txt
Er wordt een nieuw bestand gemaakt met het eerste commando en er wordt tekst ingevoegd erin. Het tweede commando voegt een regel tekst toe aan de onderkant van het bestand. Het cat
commando toont de inhoud van het bestand in het terminalvenster.
En natuurlijk kunnen we variabelen toevoegen om wat nuttige informatie aan ons bestand toe te voegen. Als het bestand een logfile is, willen we er misschien een tijdstempel aan toevoegen. We kunnen dat doen met het volgende commando.
Let op de enkele aanhalingstekens rond de parameters voor het date
commando. Ze voorkomen dat de ruimte tussen de parameters wordt geïnterpreteerd als het einde van de parameterlijst. Ze zorgen ervoor dat de parameters correct worden doorgegeven aan date
.
echo "Logfile started: $(date +"%D %T")" > logfile.txt
cat logfile.txt
Onze logfile is voor ons aangemaakt en cat
laat ons zien dat zowel de datumstempel als de tijdstempel eraan zijn toegevoegd.
GERELATEERD : Wat zijn stdin, stdout en stderr op Linux?
Dat is het repertoire van echo
Een eenvoudig commando, maar onmisbaar. Als het niet bestond, zouden we het moeten uitvinden.
Zeus ‘streken hebben tenslotte iets goeds gedaan.
Dave McKay gebruikte voor het eerst computers toen ponsband in zwang was, en sindsdien programmeert hij. Na meer dan 30 jaar in de IT-industrie is hij nu een fulltime technologiejournalist. Tijdens zijn carrière heeft hij gewerkt als freelance programmeur, manager van een internationaal softwareontwikkelingsteam, projectmanager IT-diensten en, meest recentelijk, als functionaris voor gegevensbescherming. Dave is een Linux-evangelist en open source-voorvechter. Lees de volledige biografie “