Hoe $() en ${}-uitbreidingen in een Shell-script te gebruiken

How Use Expansions Shell Script



Als je een Linux-systeem gebruikt, weet je misschien al hoe cruciaal een shell-interface is voor interactie met je systeem. Op de meeste Linux-distributies is Bash de standaardshell die we gebruiken om opdrachten uit te voeren en scripts uit te voeren. Een shellscript is een reeks commando's die, wanneer ze worden uitgevoerd, worden gebruikt om enkele nuttige functie(s) op Linux uit te voeren. Dit .sh-bestand, geschreven door een gebruiker, bevat alle opdrachten die worden gebruikt om een ​​taak uit te voeren, zodat we die opdrachten niet één voor één handmatig hoeven uit te voeren.

In deze tutorial zullen we twee van de handigste bash-uitbreidingen uitleggen die in shell-scripts worden gebruikt:







  • $() – de opdrachtvervanging
  • ${} – de parametervervanging/variabele uitbreiding

Een uitbreiding in Shell wordt uitgevoerd op het script nadat het is opgesplitst in tokens. Een token is een reeks tekens die door de shell als een enkele eenheid worden beschouwd. Het kan een woord of een operator zijn.



We hebben alle voorbeelden en scripts die in dit artikel worden genoemd, uitgevoerd op een Debian 10 Buster-systeem. U kunt ze echter eenvoudig repliceren op de meeste Linux-shells. We gebruiken de standaard Debian-opdrachtregel, de Terminal, voor deze zelfstudie. Op Debian kunt u het als volgt openen via de zoekbalk van Application Launcher:







Om toegang te krijgen tot het startprogramma voor toepassingen, drukt u eenvoudig op de Super / Windows-toets op uw toetsenbord.

$() Opdrachtvervanging

Volgens de officiële GNU Bash Reference-handleiding:



Met opdrachtvervanging kan de uitvoer van een opdracht de opdracht zelf vervangen. Bash voert de uitbreiding uit door de opdracht uit te voeren en de opdrachtvervanging te vervangen door de standaarduitvoer van de opdracht, waarbij eventuele nieuwe regels worden verwijderd. Ingesloten nieuwe regels worden niet verwijderd, maar kunnen tijdens het splitsen van woorden worden verwijderd. Opdrachtvervanging vindt plaats wanneer een opdracht als volgt wordt ingesloten:

$(opdracht)
of
``opdracht``

De volgende echo-opdrachten vervangen bijvoorbeeld de uitvoer van de datumopdracht als invoer:

$gooide uit$(datum)
$gooide uit'datum'

U kunt ook opdrachtvervanging gebruiken om waarde toe te kennen aan een variabele. We zullen de datum van vandaag bijvoorbeeld als volgt afdrukken via de variabele VANDAAG:

$VANDAAG= $(datum)
$gooide uit '$VANDAAG'

Een ander nut van de opdrachtvervanging is in shell-loops om invoer te krijgen. Hier zullen we proberen alle .txt-bestanden in onze thuismap af te drukken met behulp van opdrachtvervanging:

voorFin /huis/aan u/ *.tekst
doen
gooide uit '$f'
gedaan

Opdrachtvervanging gebruiken in een Shell-script

De bovenstaande voorbeelden zijn een paar manieren waarop u de kracht van opdrachtvervanging in uw shellscript kunt gebruiken. Hier is een voorbeeldstatusrapport dat we kunnen afdrukken met het volgende shellscript:

#!/bin/sh

gooide uit ***Status Rapport***

VANDAAG= $(datum)
gooide uit 'Vandaag is$VANDAAG'

GEBRUIKERS= $(WHO | wc-de)
gooide uit '$USERSgebruikers zijn momenteel ingelogd'

UPTIME= $(datum;uptime)
gooide uit 'De uptime is'$UPTIME'

Opdrachtvervanging is driemaal gebruikt in dit script; bij het afdrukken van de datum, ingelogde gebruikers en uptime. We hebben het script als volgt opgeslagen:

Maakte het uitvoerbaar en voerde het vervolgens door de volgende opdracht:

$chmod+ x status.sh
$./statys.sh

Hier is de uitvoer van ons status.sh-script:

U kunt natuurlijk meer betekenisvolle scripts maken door de voorbeelden te volgen die we zojuist hebben genoemd.

${} Parameter Vervanging/Uitbreiding

Een parameter, in Bash, is een entiteit die wordt gebruikt om waarden op te slaan. Er kan naar een parameter worden verwezen door een nummer, een naam of een speciaal symbool. Wanneer naar een parameter wordt verwezen door een getal, wordt deze a . genoemd positionele parameter: . Wanneer naar een parameter wordt verwezen door een naam, wordt deze a . genoemd variabele . Wanneer naar een parameter wordt verwezen door een speciaal symbool, betekent dit dat het automatisch ingestelde parameters zijn met speciale toepassingen.

Parameteruitbreiding/vervanging is het proces van het ophalen van de waarde van de entiteit/parameter waarnaar wordt verwezen. Het is alsof je een variabele uitbreidt om de waarde ervan op te halen.

De eenvoudigst mogelijke syntaxis voor parameteruitbreiding is de volgende:

Hier ziet u hoe u de parameteruitbreiding in Bash kunt gebruiken:

${parameter}

Het eenvoudigste gebruik is bijvoorbeeld om de parameter te vervangen door zijn waarde:

$naam='John Doe'
$gooide uit ${naam}

Deze opdracht vervangt de waarde van de variabelenaam die door de echo-opdracht moet worden gebruikt:

Je zou kunnen denken dat hetzelfde kan worden bereikt door de accolades als volgt te vermijden:

Het antwoord is dat deze accolades tijdens parameteruitbreiding helpen bij het afbakenen van de variabelenaam. Laten we uitleggen wat we bedoelen met hier te beperken. Laat me de volgende opdracht uitvoeren op mijn systeem:

$gooide uit 'De naam van de persoon is'$naam_'

Het resultaat drukte de waarde van de variabelenaam niet af, omdat het systeem dacht dat ik naar de variabele name_ verwees. Mijn variabelenaam was dus niet gescheiden. De accolades in het volgende voorbeeld zullen de naam van de variabele afbakenen en de resultaten als volgt retourneren:

$gooide uit 'De naam van de persoon is'${naam}_ '

Hier zijn alle manieren waarop variabelen in Shell worden vervangen:

$ {variabele} Dit commando vervangt de waarde van de variabele.
${variabele:-woord} Als een variabele null is of niet is ingesteld, wordt variabele vervangen door woord. De waarde van de variabele verandert niet.
${variabele:=woord} Als een variabele null is of niet is ingesteld, wordt de waarde van de variabele op woord gezet.
${variabele:?bericht} Als een variabele null is of niet is ingesteld, wordt het bericht afgedrukt met de standaard bash-fout.
${variabele:+woord} Indien variabele is ingesteld, woord wordt vervangen door variabel. De waarde van de variabele zelf verandert echter niet.

De bovenstaande voorbeelden zijn enkele manieren waarop u de kracht van variabele substitutie in Bash kunt gebruiken. U kunt deze manieren om expansie te gebruiken in uw shellscripts opnemen om uw taak optimaal uit te voeren.