Práce s proměnnými v systému Linux

V systémech Linux je uloženo mnoho důležitých hodnot, které nazýváme „proměnné“, ale ve skutečnosti existuje několik typů proměnných a některé zajímavé příkazy, které vám mohou pomoci s nimi pracovat. V předchozím příspěvku jsme se podívali na proměnné prostředí a kde jsou definovány. V tomto příspěvku se podíváme na proměnné, které se používají na příkazovém řádku a ve skriptech.

Uživatelské proměnné

I když je docela snadné nastavit proměnnou na příkazovém řádku, existuje několik zajímavých triků. Chcete-li nastavit proměnnou, vše, co musíte udělat, je něco takového:

$ myvar = 11 $ myvar2 = "jedenáct" 

Chcete-li zobrazit hodnoty, jednoduše postupujte takto:

$ echo $ myvar 11 $ echo $ myvar2 jedenáct 

Můžete také pracovat s proměnnými. Například pro zvýšení číselné proměnné můžete použít některý z těchto příkazů:

$ myvar = $ ((myvar + 1)) $ echo $ myvar 12 $ ((myvar = myvar + 1)) $ echo $ myvar 13 $ ((myvar + = 1)) $ echo $ myvar 14 $ ((myvar ++)) $ echo $ myvar 15 $ let "myvar = myvar + 1" $ echo $ myvar 16 $ let "myvar + = 1" $ echo $ myvar 17 $ let "myvar ++" $ echo $ myvar 18 

U některých z nich můžete k hodnotě proměnné přidat více než 1. Například:

$ myvar0 = 0 $ ((myvar0 ++)) $ echo $ myvar0 1 $ ((myvar0 + = 10)) $ echo $ myvar0 11 

U všech těchto možností pravděpodobně najdete alespoň jednu, která je snadno zapamatovatelná a snadno použitelná.

Můžete také nenastaveno proměnná - v podstatě to nedefinuje.

$ unset myvar $ echo $ myvar 

Další zajímavou možností je, že můžete nastavit proměnnou a vytvořit ji pouze ke čtení. Jinými slovy, jakmile je nastavena pouze pro čtení, její hodnotu nelze změnit (alespoň ne bez nějakého velmi složitého průvodce příkazového řádku). To znamená, že to nemůžete zrušit.

$ readonly myvar3 = 1 $ echo $ myvar3 1 $ ((myvar3 ++)) -bash: myvar3: readonly variabilní $ unset myvar3 -bash: unset: myvar3: nelze zrušit: readonly variabilní 

K přiřazování a manipulaci s proměnnými v rámci skriptů můžete použít libovolnou z těchto možností nastavení a zvyšování, ale existují i ​​některé velmi užitečné vnitřní proměnné pro práci v rámci skriptů. Všimněte si, že nemůžete znovu přiřadit jejich hodnoty nebo je zvýšit.

Vnitřní proměnné

Existuje poměrně málo proměnných, které lze v skriptech použít k vyhodnocení argumentů a zobrazení informací o samotném skriptu.

  • $ 1, $ 2, $ 3 atd. Představují první, druhý, třetí atd. Argumenty skriptu.
  • $ # představuje počet argumentů.
  • $ * představuje řetězec argumentů.
  • $ 0 představuje název samotného skriptu.
  • $? představuje návratový kód dříve spuštěného příkazu (0 = úspěch).
  • $$ ukazuje ID procesu skriptu.
  • $ PPID zobrazuje ID procesu pro vaše prostředí (nadřazený proces pro skript).

Některé z těchto proměnných fungují také na příkazovém řádku, ale zobrazují související informace:

  • 0 $ zobrazuje název shellu, který používáte (např. -Bash).
  • $$ zobrazuje ID procesu pro vaše prostředí.
  • $ PPID zobrazuje ID procesu pro nadřazený proces vaší shellu (pro mě je to sshd).

Pokud hodíme všechny tyto proměnné do skriptu jen proto, abychom viděli výsledky, můžeme to udělat:

#! / bin / bash echo $ 0 echo $ 1 echo $ 2 echo $ # echo $ * echo $? echo $$ echo $ PPID 

Když zavoláme tento skript, uvidíme něco takového:

$ tryme jeden dva tři / home / shs / ​​bin / tryme <== script name one <== first argument two <== second argument 3 <== number of arguments one two three <== all arguments 0 <== return code from previous echo command 10410 <== script's process ID 10109 <== parent process's ID 

Pokud zkontrolujeme ID procesu shellu, jakmile je skript spuštěn, můžeme vidět, že odpovídá PPID zobrazenému ve skriptu:

$ echo $$ 10109 <== shell's process ID 

Samozřejmě je pravděpodobnější, že tyto proměnné použijeme mnohem užitečnějším způsobem, než jednoduše zobrazíme jejich hodnoty. Pojďme se podívat na několik způsobů, jak to udělat.

Kontrola, zda byly zadány argumenty:

pokud [$ # == 0]; potom ozvěna "$ 0 filename" exit 1 fi 

Kontrola, zda konkrétní proces běží:

ps -ef | grep apache2> / dev / null pokud [$? ! = 0]; pak echo Apache neběží výstupní fi 

Než se pokusíte o přístup k souboru, ověřte, zda soubor existuje:

pokud [$ # -lt 2]; pak echo "Použití: $ 0 řádků název souboru" ukončete 1 fi, pokud [! -f $ 2]; potom echo "Chyba: Soubor $ 2 nebyl nalezen" výstup 2 jinak hlava - $ 1 $ 2 fi 

A v tomto malém skriptu zkontrolujeme, zda byl zadán správný počet argumentů, zda je první argument číselný a druhý argument je existující soubor.

#! / bin / bash, pokud [$ # -lt 2]; pak ozvěna „Použití: $ 0 řádků název souboru“ ukončete 1 fi, pokud [[$ 1! = [0-9] *]]; pak echo "Chyba: $ 1 není číselný" exit 2 fi, pokud [! -f $ 2]; potom echo "Chyba: Soubor $ 2 nebyl nalezen" ukončit 3 jinak echo horní část hlavy souboru - $ 1 $ 2 fi 

Přejmenování proměnných

Při psaní komplikovaného skriptu je často užitečné přiřadit jména argumentům skriptu, spíše než je nadále označovat jako $ 1, $ 2 atd. Na 35. řádku mohl někdo, kdo čte váš skript, zapomenout, co představuje 2 $. To bude mnohem jednodušší pro tuto osobu, pokud přiřadíte hodnotu důležitého parametru $ filename nebo $ numlines.

#! / bin / bash, pokud [$ # -lt 2]; pak echo "Použití: $ 0 řádků název_souboru" ukončit 1 jinak numlines = $ 1 název souboru = $ 2 fi, pokud [[$ numlines! = [0-9] *]]; pak echo "Chyba: $ numlines není číselný" exit 2 fi, pokud [! -f $ filename]; pak echo "Chyba: File $ filename nebyl nalezen" exit 3 else echo horní část hlavy souboru - $ numlines $ filename fi 

Tento příklad skriptu samozřejmě neudělá nic jiného než spuštění příkazu head k zobrazení horních X řádků v souboru, ale má ukázat, jak lze použít interní parametry uvnitř skriptů, aby se zajistilo, že skript funguje dobře nebo selže alespoň s nějaká jasnost.

[Podívejte se na tipy dvouminutových linuxových tipů společnosti Sandra Henry-Stocker, abyste zjistili, jak zvládnout řadu příkazů pro systém Linux] Připojte se ke komunitám World World na Facebooku a LinkedIn a přidávejte komentáře k tématům, která jsou na prvním místě.