Hvordan bruke $ () og $ {} utvidelser i et Shell -skript

How Use Expansions Shell Script



Hvis du bruker et Linux -system, vet du kanskje allerede hvor viktig et skallgrensesnitt er for å samhandle med systemet ditt. På de fleste Linux -distribusjoner er Bash standardskallet som vi bruker til å kjøre kommandoer og utføre skript. Et skallskript er et sett med kommandoer som, når de utføres, brukes til å utføre noen nyttige funksjoner på Linux. Denne .sh -filen, skrevet av en bruker, inneholder alle kommandoene som brukes for å utføre en oppgave, slik at vi ikke trenger å kjøre disse kommandoene manuelt, en etter en.

I denne opplæringen vil vi forklare to av de mest nyttige bash -utvidelsene som brukes i skallskript:







  • $ () - kommandosubstitusjon
  • $ {} - parameteren substitusjon/variabel ekspansjon

En utvidelse i Shell utføres på skriptet etter at det har blitt delt inn i tokens. Et token er en sekvens av tegn som betraktes som en enkelt enhet av skallet. Det kan enten være et ord eller en operatør.



Vi har kjørt alle eksemplene og skriptene som er nevnt i denne artikkelen om et Debian 10 Buster -system. Du kan imidlertid enkelt replikere dem på de fleste Linux -skjell. Vi bruker standard Debian -kommandolinje, Terminal, for denne opplæringen. På Debian kan du få tilgang til den via søkefeltet i App Launcher på følgende måte:







For å få tilgang til programstarteren, trykk ganske enkelt på Super/Windows -tasten på tastaturet.

$ () Kommandobytte

I henhold til den offisielle GNU Bash -referansehåndboken:



Kommandosubstitusjon lar utdata fra en kommando erstatte selve kommandoen. Bash utfører utvidelsen ved å utføre kommandoen og erstatte kommandosubstitusjonen med standardutdataene fra kommandoen, med eventuelle etterfølgende nye linjer slettet. Innebygde nye linjer slettes ikke, men de kan bli fjernet under orddeling. Kommandosubstitusjon oppstår når en kommando er vedlagt som følger:

$(kommando)
eller
``kommando``

For eksempel erstatter følgende ekkokommandoer datokommandoens utdata som input:

$kastet ut$(Dato)
$kastet ut'Dato'

Du kan også bruke kommandosubstitusjon til å tilordne verdi til en variabel. For eksempel vil vi skrive ut dagens dato gjennom variabelen TODAY som følger:

$I DAG= $(Dato)
$kastet ut '$ I DAG'

Et annet verktøy for kommandosubstitusjonen er i skallløkker for å få input. Her vil vi prøve å skrive ut alle .txt -filene i hjemmemappen ved hjelp av kommandosubstitusjon:

tilfi /hjem/til deg/ *.tekst
gjøre
kastet ut '$ f'
gjort

Bruke kommandosubstitusjon i et Shell -skript

Eksemplene ovenfor er noen få måter du kan utnytte kraften til kommandosubstitusjon i skallskriptet ditt. Her er en eksempelstatusrapport som vi kan skrive ut ved hjelp av følgende skallskript:

#!/bin/sh

kastet ut ***Statusrapport***

I DAG= $(Dato)
kastet ut 'Idag er$ I DAG'

BRUKERE= $(WHO | toalett-de)
kastet ut '$ BRUKEREbrukere er for øyeblikket logget inn '

OPTID= $(Dato;oppetid)
kastet ut 'Oppetiden er$ UPTIME'

Kommandosubstitusjon har blitt brukt tre ganger i dette skriptet; i utskrift av dato, påloggede brukere og oppetid. Vi lagret skriptet slik:

Gjort det kjørbart og kjørte det deretter gjennom følgende kommando:

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

Her er produksjonen av status.sh -skriptet vårt:

Du kan selvfølgelig lage mer meningsfulle skript ved å følge eksemplene vi nettopp har nevnt.

$ {} Parameterbytte/utvidelse

En parameter, i Bash, er en enhet som brukes til å lagre verdier. En parameter kan refereres til med et tall, et navn eller et spesielt symbol. Når en parameter refereres til med et tall, kalles det a posisjonsparameter . Når en parameter refereres til med et navn, kalles det a variabel . Når en parameter refereres til av et spesielt symbol, betyr det at de er parametre for automatisk innstilling med spesiell bruk.

Parameterutvidelse/substitusjon er prosessen med å hente verdien fra enheten/parameteren det refereres til. Det er som om du utvider en variabel for å hente verdien.

Den enkleste mulige parameterutvidelsessyntaksen er følgende:

Slik kan du bruke parameterutvidelsen i Bash:

$ {parameter}

For eksempel er den enkleste bruken å erstatte parameteren med verdien:

$Navn='John Doe'
$kastet ut $ {name}

Denne kommandoen erstatter verdien av variabelnavnet som skal brukes av ekkokommandoen:

Du tenker kanskje at det samme kan oppnås ved å unngå de krøllete selene som følger:

Svaret er at under parameterutvidelse hjelper disse krøllete bukseselene med å avgrense variabelnavnet. La oss forklare hva vi mener med å begrense her. La meg kjøre følgende kommando på systemet mitt:

$kastet ut 'Navnet på personen er$ name_'

Resultatet skrev ikke ut verdien av variabelnavnet ettersom systemet trodde at jeg refererte til variabelen name_. Dermed var ikke variabelnavnet mitt avgrenset. De krøllete bukseseler i følgende eksempel vil avgrense variabelnavnet og returnere resultatene som følger:

$kastet ut 'Navnet på personen er$ {name}_ '

Her er alle måtene variabler erstattes på i Shell:

$ {variable} Denne kommandoen erstatter verdien av variabelen.
$ {variable: -word} Hvis en variabel er null eller hvis den ikke er angitt, erstattes ordet med variabel. Verdien på variabelen endres ikke.
$ {variabel: = word} Hvis en variabel er null eller hvis den ikke er angitt, settes verdien til variabelen til word.
$ {variable:? melding} Hvis en variabel er null eller hvis den ikke er angitt, skrives meldingen ut til standard bash -feil.
$ {variabel:+word} Hvis variabel er satt, ord er erstattet med variabel. Verdien av variabelen i seg selv endres imidlertid ikke.

Eksemplene ovenfor er noen måter du kan utnytte kraften til variabel substitusjon i Bash. Du kan inkorporere disse måtene for å bruke utvidelse i skallskriptene dine for å oppnå din oppgave optimalt.