Kako koristiti proširenja $ () i $ {} u Shell skripti

How Use Expansions Shell Script

Ako koristite Linux sustav, možda već znate koliko je sučelje ljuske ključno za interakciju s vašim sustavom. Na većini distribucija Linuxa Bash je zadana ljuska koju koristimo za pokretanje naredbi i izvršavanje skripti. Skripta ljuske je skup naredbi koje se, kada se izvode, koriste za izvršavanje nekih korisnih funkcija na Linuxu. Ova .sh datoteka, koju je napisao korisnik, sadrži sve naredbe koje se koriste za izvršavanje zadatka, tako da te naredbe ne moramo pokretati ručno, jednu po jednu.

U ovom ćemo vodiču objasniti dva najkorisnija bash proširenja koja se koriste u skriptama ljuske:



  • $ () - zamjena naredbe
  • $ {} - zamjena parametra/proširenje varijable

Proširenje u Shellu izvodi se na skripti nakon što je podijeljena na žetone. Token je niz znakova koje ljuska smatra jednom jedinicom. To može biti riječ ili operator.



Pokrenuli smo sve primjere i skripte spomenute u ovom članku na Debian 10 Buster sustavu. Međutim, možete ih jednostavno replicirati na većini Linux ljuski. Za ovaj vodič koristimo zadani Debian naredbeni redak, Terminal. Na Debianu možete pristupiti putem trake za pretraživanje Pokretača aplikacija na sljedeći način:



Za pristup Pokretaču aplikacija jednostavno pritisnite tipku Super/Windows na tipkovnici.

Zamjena naredbe $ ()

Prema službenom GNU Bash referentnom priručniku:



Zamjena naredbe omogućuje izlaz naredbe da zamijeni samu naredbu. Bash izvodi proširenje izvršavanjem naredbe i zamjenom zamjene naredbe standardnim izlazom naredbe, s brisanjem svih novih redova. Ugrađeni novi retci ne brišu se, ali se mogu ukloniti tijekom cijepanja riječi. Zamjena naredbe događa se kada je naredba zatvorena na sljedeći način:

$(naredba)
ili
``naredba``

Na primjer, sljedeće naredbe echo zamjenjuju izlaz naredbe date kao njihov ulaz:

$izbaciti$(datum)
$izbaciti'datum'

Također možete koristiti zamjenu naredbe za dodjeljivanje vrijednosti varijabli. Na primjer, današnji ćemo datum ispisati kroz varijablu TODAY na sljedeći način:

$DANAS= $(datum)
$izbaciti '$ DANAS'

Drugi uslužni program zamjene naredbi je u petljama ljuske za dobivanje unosa. Ovdje ćemo pokušati ispisati sve .txt datoteke u našoj matičnoj mapi pomoću zamjene naredbi:

zafu /Dom/tebi/ *.txt
čini
izbaciti '$ f'
učinjeno

Korištenje zamjene naredbi u Shell skripti

Gore navedeni primjeri su nekoliko načina na koje možete koristiti snagu zamjene naredbi u skripti ljuske. Evo uzorka izvješća o statusu koje možemo ispisati pomoću sljedeće ljuske skripte:

#!/bin/sh

izbaciti ***Izvješće o statusu***

DANAS= $(datum)
izbaciti 'Danas je$ DANAS'

KORISNICI= $(tko | zahod-)
izbaciti 'KORISNICI USDkorisnici su trenutno prijavljeni '

ZAVRŠENO VREME= $(datum;vrijeme rada)
izbaciti 'Produžetak je$ UPTIME'

Zamjena naredbe je tri puta korištena u ovoj skripti; u ispisivanju datuma, prijavljenim korisnicima i neprekidnom radu. Skriptu smo spremili na sljedeći način:

Učinio ga izvršnim, a zatim prošao kroz sljedeću naredbu:

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

Evo rezultata naše skripte status.sh:

Naravno, možete stvoriti smislenije skripte slijedeći primjere koje smo upravo spomenuli.

$ {} Zamjena parametara/proširenje

Parametar, u bashu, je entitet koji se koristi za spremanje vrijednosti. Parametar se može referencirati brojem, imenom ili posebnim simbolom. Kada se parametar poziva na broj, naziva se a pozicijski parametar . Kad se parametar naziva imenom, on se naziva a promjenjivo . Kada se parametar poziva posebnim simbolom, to znači da su parametri s automatskim postavljanjem za posebne namjene.

Proširenje/zamjena parametara je postupak dohvaćanja vrijednosti iz referenciranog entiteta/parametra. To je kao da proširujete varijablu kako biste dohvatili njezinu vrijednost.

Najjednostavnija moguća sintaksa proširenja parametara je sljedeća:

Evo kako možete koristiti proširenje parametara u Bashu:

$ {parameter}

Na primjer, najjednostavnija upotreba je zamjena parametra njegovom vrijednošću:

$Ime='John Doe'
$izbaciti $ {name}

Ova će naredba zamijeniti vrijednost imena varijable koju će koristiti naredba echo:

Možda mislite da se isto može postići izbjegavanjem kovrčavih zagrada na sljedeći način:

Odgovor je da tijekom proširenja parametara ove kovrčave zagrade pomažu u odvajanju naziva varijable. Objasnimo što ovdje podrazumijevamo pod ograničenjem. Dopustite mi da pokrenem sljedeću naredbu na svom sustavu:

$izbaciti 'Ime osobe je$ name_'

Rezultat nije ispisao vrijednost naziva varijable jer je sustav mislio da se pozivam na varijablu name_. Dakle, moj naziv varijable nije bio ograničen. Vitičaste zagrade u sljedećem primjeru razgraničit će naziv varijable i vratiti rezultate na sljedeći način:

$izbaciti 'Ime osobe je$ {name}_ '

Evo svih načina na koje se varijable zamjenjuju u Shellu:

$ {varijabla} Ova naredba zamjenjuje vrijednost varijable.
$ {varijabla: -word} Ako je varijabla null ili ako nije postavljena, riječ se zamjenjuje varijablom. Vrijednost varijable se ne mijenja.
$ {varijabla: = riječ} Ako je varijabla null ili ako nije postavljena, vrijednost varijable se postavlja na word.
$ {varijabla:? poruka} Ako je varijabla null ili ako nije postavljena, poruka se ispisuje na standardnu ​​bash pogrešku.
$ {varijabla:+riječ} Ako promjenjivo je postavljeno, riječ je zamijenjena varijablom. Međutim, vrijednost same varijable se ne mijenja.

Gore navedeni primjeri su nekoliko načina na koje možete iskoristiti moć zamjenske varijable u Bashu. Možete uključiti ove načine korištenja proširenja u svoje skripte ljuske za optimalno postizanje vašeg trenutnog zadatka.