Hur man använder $ () och $ {} expansioner i ett Shell -skript

How Use Expansions Shell Script



Om du använder ett Linux -system kanske du redan vet hur viktigt ett skalgränssnitt är för att interagera med ditt system. På de flesta Linux -distributioner är Bash standardskal som vi använder för att köra kommandon och köra skript. Ett skalskript är en uppsättning kommandon som, när de körs, används för att utföra några användbara funktioner på Linux. Denna .sh -fil, skriven av en användare, innehåller alla kommandon som används för att utföra en uppgift så att vi inte behöver köra dessa kommandon manuellt, en efter en.

I den här självstudien kommer vi att förklara två av de mest användbara bash -utökningarna som används i skalskript:







  • $ () - kommandotsubstitution
  • $ {} - parametersubstitution/variabel expansion

En expansion i Shell utförs på skriptet efter att det har delats upp i tokens. En token är en sekvens av tecken som betraktas som en enda enhet av skalet. Det kan antingen vara ett ord eller en operatör.



Vi har kört alla exempel och skript som nämns i denna artikel om ett Debian 10 Buster -system. Men du kan enkelt replikera dem på de flesta Linux -skal. Vi använder standard Debian -kommandoraden, Terminal, för den här självstudien. På Debian kan du komma åt det via sökfältet i programstartaren enligt följande:







För att komma åt applikationsstartaren, tryck på Super/Windows -tangenten på tangentbordet.

$ () Kommandosubstitution

Enligt den officiella GNU Bash -referenshandboken:



Kommandosubstitution gör att utmatningen av ett kommando kan ersätta själva kommandot. Bash utför expansionen genom att köra kommandot och ersätta kommandosubstitutionen med standardutmatningen för kommandot, med eventuella efterföljande nyrad raderade. Inbäddade nya rader raderas inte, men de kan tas bort under orddelning. Kommandosubstitution sker när ett kommando bifogas enligt följande:

$(kommando)
eller
''kommando''

Till exempel ersätter följande ekokommandon datumkommandoens utmatning som deras ingång:

$kastade ut$(datum)
$kastade ut'datum'

Du kan också använda kommandosubstitution för att tilldela en variabel värde. Till exempel kommer vi att skriva ut dagens datum genom variabeln TODAY enligt följande:

$I DAG= $(datum)
$kastade ut '$ IDAG'

Ett annat verktyg för kommandosubstitution är i skalöglor för att få inmatning. Här kommer vi att försöka skriva ut alla .txt -filer i vår hemmapp med kommandoersättning:

förfi /Hem/till dig/ *.Text
do
kastade ut '$ f'
Gjort

Använda kommandosubstitution i ett Shell -skript

Ovanstående exempel är några sätt på vilka du kan utnyttja kommandotsubstitutionens kraft i ditt skalskript. Här är ett exempel på en statusrapport som vi kan skriva ut med följande skalskript:

#!/bin/sh

kastade ut ***Status rapport***

I DAG= $(datum)
kastade ut 'Idag är$ IDAG'

ANVÄNDARE= $(WHO | toalett-de)
kastade ut '$ ANVÄNDAREanvändare är för närvarande inloggade '

UPPTID= $(datum;drifttid)
kastade ut 'Drifttiden är$ UPTIME'

Kommandosubstitution har använts tre gånger i detta skript; vid utskrift av datum, inloggade användare och drifttid. Vi sparade manuset enligt följande:

Gjorde det körbart och körde det sedan genom följande kommando:

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

Här är resultatet av vårt status.sh -skript:

Du kan naturligtvis skapa mer meningsfulla skript genom att följa exemplen som vi just har nämnt.

$ {} Parameterbyte/expansion

En parameter i Bash är en enhet som används för att lagra värden. En parameter kan refereras med ett nummer, ett namn eller med en speciell symbol. När en parameter refereras till med ett tal kallas det a lägesparameter . När en parameter refereras till med ett namn kallas den a variabel . När en parameter refereras till av en speciell symbol betyder det att de är parametrar för automatisk inställning med speciella användningsområden.

Parameter expansion/substitution är processen att hämta värdet från den refererade entiteten/parametern. Det är som att du expanderar en variabel för att hämta dess värde.

Den enklaste möjliga parameterexpansionssyntaxen är följande:

Så här kan du använda parameterutvidgningen i Bash:

$ {parameter}

Till exempel är den enklaste användningen att ersätta parametern med dess värde:

$namn='john doe'
$kastade ut $ {name}

Detta kommando kommer att ersätta värdet på variabelnamnet som ska användas av ekokommandot:

Du kanske tror att detsamma kan uppnås genom att undvika de lockiga hängslen enligt följande:

Svaret är att under parameterutvidgning hjälper dessa lockiga hängslen till att avgränsa variabelnamnet. Låt oss förklara vad vi menar med att begränsa här. Låt mig köra följande kommando på mitt system:

$kastade ut 'Namnet på personen är$ name_'

Resultatet skrev inte ut värdet på variabelnamnet eftersom systemet trodde att jag syftade på variabelns namn_. Mitt variabelnamn avgränsades således inte. De lockiga hängslen i följande exempel kommer att avgränsa variabelnamnet och returnera resultaten enligt följande:

$kastade ut 'Namnet på personen är$ {name}_ '

Här är alla sätt på vilka variabler ersätts i Shell:

$ {variabel} Detta kommando ersätter variabelns värde.
$ {variable: -word} Om en variabel är null eller om den inte är inställd, ersätts variabel med ordet. Variabelns värde ändras inte.
$ {variabel: = word} Om en variabel är null eller om den inte är inställd, sätts variabelns värde till word.
$ {variabel:? meddelande} Om en variabel är null eller om den inte är inställd skrivs meddelandet ut till standard bash -fel.
$ {variabel:+word} Om variabel är inställd, ord ersätts med variabel. Värdet på variabeln i sig ändras dock inte.

Ovanstående exempel är några sätt på vilka du kan utnyttja kraften hos variabel substitution i Bash. Du kan införliva dessa sätt att använda expansion i dina skalskript för att optimalt uppnå din uppgift.