I denne opplæringen vil vi forklare to av de mest nyttige bash -utvidelsene som brukes i skallskript:
En utvidelse i Shell utføres på manuset etter at det er delt inn i symboler. Et token er en sekvens av tegn som er betraktet 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 på et Debian 10 Buster -system. Imidlertid kan du enkelt gjenskape dem på de fleste Linux -skjell. Vi bruker standard Debian -kommandolinjen, terminalen, for denne opplæringen. På Debian kan du få tilgang til den gjennom søkelagerets søkelinje som følger:
For å få tilgang til applikasjonslageret, treffer du Super/Windows -tasten på tastaturet.
$ () Kommandosubstitusjon
I følge den offisielle GNU Bash Reference Manual:
“Kommandosubstitusjon lar utdataene fra en kommando erstatte selve kommandoen. Bash utfører utvidelsen ved å utføre kommandoen og erstatte kommandosubstitusjonen med standardutgangen til kommandoen, med eventuelle etterfølgende newlineer slettet. Innbygde newlines blir ikke slettet, men de kan fjernes under orddelingen.” Kommandosubstitusjon oppstår når en kommando er vedlagt som følger:
$ (kommando)
eller
'kommando'
Følgende Echo -kommandoer erstatter for eksempel datakommandoen som deres innspill:
$ ekko $ (dato)
$ ekko 'Dato'
Du kan også bruke kommandosubstitusjon for å tildele verdi til en variabel. For eksempel vil vi skrive ut dagens dato gjennom variabelen i dag som følger:
$ I dag = $ (dato)
$ ekko "$ i dag"
En annen verktøy av kommandosubstitusjonen er i skallløkker for å få innspill. Her vil vi prøve å skrive ut alt .TXT -filer i vår hjemmemappe ved hjelp av kommandosubstitusjon:
for f in/home/sana/*.tekst
gjøre
ekko "$ f"
Ferdig
Bruke kommandosubstitusjon i et skallskript
Ovennevnte eksempler er noen måter du kan bruke kraften i kommandosubstitusjon i skallskriptet ditt. Her er en eksempler på statusrapport som vi kan skrive ut ved hjelp av følgende skallskript:
#!/bin/sh
ekko *** statusrapport ***
I dag = $ (dato)
ekko "I dag er $ i dag"
Brukere = $ (hvem | wc -l)
Echo "$ brukere brukere er for øyeblikket logget inn"
Oppetid = $ (dato; oppetid)
ekko "Opptidet er $ oppetid"
Kommandosubstitusjon har blitt brukt tre ganger i dette skriptet; Når du skriver ut datoen, logget inn brukere og oppetid. Vi lagret skriptet som følger:
Gjorde den kjørbar og kjørte den deretter gjennom følgende kommando:
$ chmod +x status.sh
$ ./Statys.sh
Her er resultatet av vår status.sh manus:
Du kan selvfølgelig lage mer meningsfulle skript ved å følge eksemplene vi nettopp har nevnt.
$ Parameter substitusjon/utvidelse
En parameter, i bash, er en enhet som brukes til å lagre verdier. En parameter kan refereres til av et tall, et navn eller av et spesielt symbol. Når en parameter refereres til av et nummer, kalles den en Posisjonsparameter. Når en parameter refereres til med et navn, kalles den en variabel. Når en parameter blir referert til av et spesielt symbol, betyr det at de er autosettparametere med spesiell bruk.
Parameterutvidelse/substitusjon er prosessen med å hente verdien fra den refererte enheten/parameteren. Det er som om du utvider en variabel for å hente verdien.
Den enkleste mulige parameterutvidelsessyntaks er følgende:
Slik kan du bruke parameterutvidelsen i bash:
$ parameter
For eksempel er den enkleste bruken å erstatte parameteren etter verdien:
$ name = "John doe"
$ ekko “$ name”
Denne kommandoen vil erstatte verdien av variabelen “Navn” som skal brukes av Echo -kommandoen:
Du tenker kanskje at det samme kan oppnås ved å unngå krøllete tannregulering som følger:
Svaret er at disse krøllete tannreguleringene under parameterutvidelse hjelper til med å avgrense variabelnavnet. La oss forklare hva vi mener med å begrense her. La meg kjøre følgende kommando på systemet mitt:
$ ekko "Navnet på personen er $ name_"
Resultatet skrev ikke ut verdien av variabelnavnet da systemet trodde at jeg refererte til variabelen “Name_”. Dermed ble ikke variabelnavnet mitt "avgrenset". De krøllete seler i følgende eksempel vil avgrense variabelnavnet og returnere resultatene som følger:
$ ekko "Navnet på personen er $ Navn _"
Her er alle måtene variabler erstattes i skall:
$ variabel | Denne kommandoen erstatter verdien av variabelen. |
$ variabel: -word | Hvis en variabel er null, eller hvis den ikke er angitt, erstattes ordet med variabel. Verdien på variabelen endres ikke. |
$ variabel: = ord | Hvis en variabel er null, eller hvis den ikke er angitt, er verdien av variabelen satt til Word. |
$ variabel:?beskjed | Hvis en variabel er null, eller hvis den ikke er angitt, skrives meldingen til standard bash -feilen. |
$ variabel:+ord | Hvis variabel er satt, ord erstattes med variabel. Verdien på selve variabelen endres imidlertid ikke. |
Ovennevnte eksempler er noen måter du kan bruke kraften til variabel substitusjon i bash. Du kan innlemme disse måtene å bruke utvidelse i skallskriptene dine for å oppnå oppgaven din optimalt.