En Abléck vu Linux Variablen an der Shell Skriptsprooch - Deel 9


Mir hu schonn eng Serie vun Artikelen iwwer Linux Shell Scripting geschriwwen, déi déi Zäit häerzlech begréisst gouf an et war och elo vill relevant. Hei ass de Link op d'Sammlung vun Artikelen iwwer Shell Scripting.

  1. Léiert Linux Shell Scripting

Hei an dësem Artikel wäerte mir d'Variabelen, seng Ausféierung a seng Ëmsetzung am Shell-Skript gesinn.

D'Ausgab vun engem Kommando kann op Standardausgang oder eng Datei ëmgeleet ginn a kann och an enger Variabel gespäichert ginn. Wann d'Ausgab vun engem Kommando grouss genuch ass sou datt et net um Bildschierm passt, bleiwe mir nëmmen d'Optioun fir d'Ausgab op eng Datei an enger Variabel ze späicheren. Ee Virdeel fir d'Ausgab op Variabel ze späicheren ass méi séier Untersuchungsgeschwindegkeet. Variablen ginn an d'Erënnerung gespäichert an dofir tendéiert et séier ze sinn am Verglach zum Erhuelung aus der Datei.

Variablen sinn e wichtege Bestanddeel deen am Shell Scripting benotzt gëtt a gi mat dem Bash Kommando Declare deklaréiert.

$ declare LEVEL

Bemierkung: Mir mussen \typecast benotzen, eng gebauter Ausso fir Korn Shell Kompatibilitéit. D''erklären' ass méi fortgeschratt an enthält all d'Features, dofir ass recommandéiert wann Dir BASH benotzt.

  1. E Variabel Numm muss justifiéieren, d'Benotzung vun der Variabel am Skript.
  2. Dee selwechte Variabel Numm am ganze Programm ze benotzen ass staark ugeroden.
  3. Numm vun den Variablen kann grouss Buschtawen sinn, awer duerch d'Konventioun sinn Shellbefehle a klenge Buschtawen, an dofir sollte mir den Numm vun den Variabelen an der Groussschrëft benotzen, fir all Duercherneen ze läschen. zB TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT, etc.

Eng Variabel kann e Wäert mat engem Gläichzeechen (=) zougewisen ginn. Fir eng eidel String un eng Variabel ze ginn, däerfe mir kee Wäert nom Gläichzeechen ubidden.

$ LEVEL =

Kontrolléiert de Wäert gespäichert an der Variabel 'LEVEL' als.

$ printf "%i" $LEVEL

printf, de Kommando déi meescht vun 'C' Programméierer bewosst sinn, dréckt Daten. %i - Representéiert Integer. Mir kënnen et ersetzen duerch %c fir Charakter oder %c fir String, wéi a wann néideg.

$LEVEL: Notéiert den '$' deen als Wäertersatz fir d'Variabel 'LEVEL' funktionnéiert.

$ printf "%i" $LEVEL
0

Gitt e Wäert un d'Variabel.

$ LEVEL=0

Kontrolléiert déi gespäichert Donnéeën a Variabel.

$ printf "%i" $LEVEL
0

NOTÉIERT: Et ass interessant ze notéieren datt a béide Fäll, wa mir de Wäert net un d'Variabel zougewisen hunn a wa mir de Wäert '0' un d'Variabel 'LEVEL' Ausgaben 0 zougewisen hunn. mee Shell Skript geréiert souwuel d'Variabel Deklaratioun anescht.

Gitt en neie Wäert un d'Variabel.

$ LEVEL=121

Kontrolléiert déi gespäichert Donnéeën a Variabel.

$ printf "%i" $LEVEL
121

Declare ass e BASH Kommando an et erstellt Variabel nëmme wann se ausgefouert ginn. D'Variabel sou erstallt bleift an der Erënnerung bis de Skript ophält oder d'Variabel zerstéiert gëtt.

$ unset LEVEL

BASH huet iwwer 50 Variabelen virdefinéiert. E puer vun dëse Variablen hunn eng speziell Bedeitung verbonnen mat BASH, zB eng Variabel RANDOM gëtt eng zoufälleg Zuel eraus. Wann et net gesat ass an dann erëm definéiert ass, ass den urspréngleche Variabelwäert fir ëmmer verluer. Dofir ass et ugeroden keng systemdefinéiert Variabel ze benotzen.

Hei ass eng Lëscht vun e puer nëtzlech BASH Variablen.

  1. BASH—De ganze Wee vum Bash.
  2. BASH_ENV—An engem Shell-Skript, den Numm vun der Profildatei, déi ausgefouert gouf ier de Skript gestart gouf.
  3. BASH_VERSION—D'Versioun vu Bash (zum Beispill 2.04.0(1)-Release).
  4. KOLONNEN - D'Zuel vun Zeechen pro Zeil op Ärem Display (zum Beispill 80).
  5. HOSTNAME—Den Numm vum Computer. Ënner e puer Versioune vu Linux kann dëst de Maschinnnumm sinn. Op anerer kann et e vollqualifizéierten Domainname sinn.
  6. HOSTTYPE—Typ vum Computer.
  7. HOME—Den Numm vun Ärem Heemverzeichnis.
  8. OSTYPE—Den Numm vum Betribssystem.
  9. PATH - Colon-getrennt Lëscht vu Sichweeër fir e Kommando ze fannen fir auszeféieren.
  10. PPID - D'Prozess ID vum Eltereprozess vun der Shell.
  11. PROMPT_COMMAND—Kommando fir auszeféieren virum Astellung vun der PS1 primärer Ufro String.
  12. PWD—Den aktuellen Aarbechtsverzeichnis (wéi vum CD Kommando festgeluecht).
  13. RANDOM—Gitt eng zoufälleg Zuel tëscht 0 an 32767 all Kéier wann se referenzéiert gëtt.
  14. SHELL—Déi léifste Shell fir ze benotzen; fir Programmer déi eng Shell fir Iech starten.
  15. TERM—Den Terminal-Emuléierungstyp (zum Beispill Konsol).

D'Regel vum Word Splitting.

$ LEVEL=0
$ printf "%i" $LEVEL
0

AND

$ LEVEL=”0”
$ printf "%i" $LEVEL
0

A béide Fäll bleift d'Ausgab d'selwecht. Also wat ass den Ënnerscheed am Resultat wann Dir Zitat benotzt?

Loosst d'selwecht kontrolléieren mat verschiddene variabelen Donnéeën.

$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
$ printf "%i" $LEVEL
0

Net ze ernimmen, d'Ausgab ass net korrekt. BASH hëlt de Raum no '0' als Terminatioun an dofir ass de Wäert vun der Variabel als '0' gesat. Elo probéieren mir Zitat fir Variablen ze benotzen wéi hei ënnen.

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
$ printf "%s" $LEVEL 
0;1;2;3;4;5

Trotzdem ass d'Resultat net richteg. BASH huet d'Variabel Wäerter geholl an all d'Plazen tëscht hinnen ewechgeholl. Dofir huet printf 0,1,2,3,4,5 net als ënnerschiddlech Wäerter interpretéiert. Also wat ass d'Léisung?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

jo! D'Variabel Ersatz ënner Zitater ze setzen ass d'Léisung. Zitater gruppéiere Personnagen a Shell an interpretéieren d'Spezialzeechen op eng sënnvoll Manéier.

Zitater kënne back-to-back benotzt ginn an et ass eng gutt Iddi fir variabel Ersatzstécker mat Zitater ofzeschléissen. Ausserdeem kann et benotzt ginn fir Gesamttext vun Zitater ze trennen. Hei ass e Beispill.

$ LEVEL=5 
$ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
$ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

D'Trennung vun Stécker vun zitéierten Text mat Raum wäert zu deemselwechte Problem féieren wéi uewen diskutéiert. De Bash wäert de wäisse Raum als Terminatioun behandelen. Eng aner Manéier fir variabel Ersatz ass.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

Eenzel Zitater beschränkt BASH aus Dréckerei Spezial Zeechen.

$ printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

Backslash funktionnéiert wéi een eenzegen Zitat fir ee Charakter. Hutt Dir geduecht wéi wäert Dir drécken (\)?

$ printf "%c" "\""

Wann %q mat printf gruppéiert ass, gëtt Backslash no all Wuert fir Wuertabstand ze garantéieren.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

Dat ass alles fir elo. Mir probéieren ëmmer eise Lieser mat Artikelen ze ginn, déi fir si all elo an dann nëtzlech sinn. Deen uewe iwwerdeckten Artikel ass enorm, dofir ginn de Rescht vun den Themen mat Beispiller am nächsten Artikel produzéiert, deen 'Attributer vu Variabel', 'Variabel exportéieren' etc.

Bis dohin Bleift ofgeschloss a verbonne mat linux-console.net. Vergiesst net eis Äre wäertvolle Feedback an der Kommentarsektioun hei drënner ze ginn.