Sådan bruges $ () og $ {} udvidelser i et Shell -script

How Use Expansions Shell Script



Hvis du bruger et Linux -system, ved du måske allerede, hvor afgørende et shell -interface er for at interagere med dit system. På de fleste Linux -distributioner er Bash standardskallen, som vi bruger til at køre kommandoer og udføre scripts. Et shell -script er et sæt kommandoer, der, når de udføres, bruges til at udføre nogle nyttige funktioner på Linux. Denne .sh -fil, skrevet af en bruger, indeholder alle de kommandoer, der bruges til at udføre en opgave, så vi ikke behøver at køre disse kommandoer manuelt, en efter en.

I denne vejledning forklarer vi to af de mest nyttige bash -udvidelser, der bruges i shell -scripts:







  • $ () - kommandosubstitution
  • $ {} - parameteren substitution/variabel ekspansion

En udvidelse i Shell udføres på scriptet, efter at det er blevet opdelt i tokens. Et token er en sekvens af tegn, der betragtes som en enkelt enhed af skallen. Det kan enten være et ord eller en operator.



Vi har kørt alle eksempler og scripts, der er nævnt i denne artikel om et Debian 10 Buster -system. Du kan dog nemt kopiere dem på de fleste Linux -skaller. Vi bruger standard Debian -kommandolinjen, Terminalen, til denne vejledning. På Debian kan du få adgang til det via søgelinjen i Application Launcher som følger:







For at få adgang til Application Launcher skal du blot trykke på Super/Windows -tasten på dit tastatur.

$ () Kommandosubstitution

Ifølge den officielle GNU Bash Reference manual:



Kommandosubstitution gør det muligt for en kommando at udskifte selve kommandoen. Bash udfører udvidelsen ved at udføre kommandoen og erstatte kommandosubstitutionen med standardoutput fra kommandoen, med eventuelle efterfølgende nye linjer slettet. Indlejrede nye linjer slettes ikke, men de kan blive fjernet under ordopdeling. Kommandosubstitution sker, når en kommando er vedlagt som følger:

$(kommando)
eller
``kommando``

For eksempel erstatter følgende ekkokommandoer datokommandoens output som deres input:

$smed ud$(dato)
$smed ud'dato'

Du kan også bruge kommandosubstitution til at tildele værdi til en variabel. For eksempel vil vi udskrive dagens dato gennem variablen TODAY som følger:

$I DAG= $(dato)
$smed ud '$ I DAG'

En anden nytteværdi af kommandosubstitutionen er i shell -loops for at få input. Her vil vi prøve at udskrive alle .txt -filer i vores hjemmemappe ved hjælp af kommandosubstitution:

tilfi /hjem/til dig/ *.txt
gøre
smed ud '$ f'
Færdig

Brug af kommandosubstitution i et Shell -script

Ovenstående eksempler er et par måder, hvorpå du kan udnytte kommandosubstitutionens kraft i dit shell -script. Her er en eksempelstatusrapport, som vi kan udskrive ved hjælp af følgende shell -script:

#!/bin/sh

smed ud ***Status rapport***

I DAG= $(dato)
smed ud 'Idag er$ I DAG'

BRUGERE= $(WHO | Toilet-det)
smed ud '$ BRUGEREbrugere er i øjeblikket logget ind '

OPTID= $(dato;oppetid)
smed ud 'Oppetiden er$ UPTIME'

Kommandosubstitution er blevet brugt tre gange i dette script; i udskrivning af datoen, logget på brugere og oppetid. Vi gemte scriptet som følger:

Gjorde det eksekverbart og kørte det derefter gennem følgende kommando:

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

Her er output fra vores status.sh script:

Du kan naturligvis oprette mere meningsfulde scripts ved at følge de eksempler, vi lige har nævnt.

$ {} Parameterbytte/udvidelse

En parameter i Bash er en enhed, der bruges til at gemme værdier. En parameter kan refereres til med et tal, et navn eller et specielt symbol. Når der refereres til en parameter med et tal, kaldes det a positionsparameter . Når en parameter refereres til med et navn, kaldes det a variabel . Når der henvises til en parameter med et specielt symbol, betyder det, at de er parametre med automatisk indstilling med særlige anvendelser.

Parameterudvidelse/substitution er processen med at hente værdien fra den refererede enhed/parameter. Det er som om du udvider en variabel for at hente dens værdi.

Den enkleste mulige parameterudvidelsessyntaks er følgende:

Sådan kan du bruge parameterudvidelsen i Bash:

$ {parameter}

For eksempel er den enkleste anvendelse at erstatte parameteren med dens værdi:

$navn='john doe'
$smed ud $ {name}

Denne kommando erstatter værdien af ​​det variabelnavn, der skal bruges af ekkokommandoen:

Du tænker måske, at det samme kan opnås ved at undgå de krøllede seler som følger:

Svaret er, at under parameterudvidelse hjælper disse krøllede seler med at afgrænse variabelnavnet. Lad os forklare, hvad vi mener med at begrænse her. Lad mig køre følgende kommando på mit system:

$smed ud 'Navnet på personen er$ navn_'

Resultatet printede ikke værdien af ​​variabelnavnet, da systemet troede, at jeg refererede til variabelnavnet_. Mit variabelnavn var således ikke afgrænset. De krøllede seler i det følgende eksempel vil afgrænse variabelnavnet og returnere resultaterne som følger:

$smed ud 'Navnet på personen er$ {name}_ '

Her er alle måder, hvorpå variabler erstattes i Shell:

$ {variable} Denne kommando erstatter værdien af ​​variablen.
$ {variable: -word} Hvis en variabel er null, eller hvis den ikke er angivet, erstattes ordet med variabel. Værdien af ​​variablen ændres ikke.
$ {variabel: = word} Hvis en variabel er null, eller hvis den ikke er angivet, sættes værdien af ​​variablen til word.
$ {variabel:? besked} Hvis en variabel er null, eller hvis den ikke er angivet, udskrives meddelelsen til standard bash -fejlen.
$ {variabel:+word} Hvis variabel er indstillet, ord er substitueret med variabel. Værdien af ​​selve variablen ændres imidlertid ikke.

Ovenstående eksempler er et par måder, hvorpå du kan udnytte kraften i variabel substitution i Bash. Du kan inkorporere disse måder at bruge udvidelse i dine shell -scripts til optimalt at nå din opgave.