Vyhledávání na webu

Jak povolit Awk používat proměnné prostředí – část 11


Když píšeme shellové skripty, běžně do našich skriptů zařazujeme další menší programy nebo příkazy, jako jsou operace Awk. V případě Awk musíme najít způsoby, jak předávat některé hodnoty z shellu operacím Awk.

To lze provést pomocí proměnných shellu v příkazech Awk a v této části seriálu se naučíme, jak povolit Awk používat proměnné shellu, které mohou obsahovat hodnoty, které chceme předat příkazům Awk.

Existují dva způsoby, jak můžete povolit Awk používat proměnné shellu:

1. Použití Shell Quoting

Podívejme se na příklad, který ilustruje, jak můžete skutečně použít citování shellu k nahrazení hodnoty proměnné shellu v příkazu Awk. V tomto příkladu chceme vyhledat uživatelské jméno v souboru /etc/passwd, filtrovat a vytisknout informace o účtu uživatele.

Proto můžeme napsat skript test.sh s následujícím obsahem:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

Poté soubor uložte a ukončete.

Interpretace příkazu Awk ve skriptu test.sh výše:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " – citace shellu používaná k nahrazení hodnoty proměnné shellu username v příkazu Awk. Hodnota username je vzor, který se má hledat v souboru /etc/passwd.

Všimněte si, že dvojitá uvozovka je mimo skript Awk, ‘{ print $0 }‘.

Poté vytvořte spustitelný skript a spusťte jej následovně:

chmod  +x  test.sh
./text.sh 

Po spuštění skriptu budete vyzváni k zadání uživatelského jména, zadejte platné uživatelské jméno a stiskněte Enter. Podrobnosti o účtu uživatele ze souboru /etc/passwd zobrazíte následovně:

2. Pomocí Awk’s Variable Assignment

Tato metoda je mnohem jednodušší a lepší ve srovnání s metodou jedna výše. Vzhledem k výše uvedenému příkladu můžeme spustit jednoduchý příkaz k provedení úlohy. V rámci této metody používáme volbu -v k přiřazení proměnné shellu k proměnné Awk.

Nejprve vytvořte proměnnou prostředí username a přiřaďte jí název, který chceme prohledávat v souboru /etc/passswd:

username="aaronkilik"

Poté zadejte příkaz níže a stiskněte Enter:

cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Vysvětlení výše uvedeného příkazu:

  1. -v – Volba Awk pro deklaraci proměnné
  2. username – je proměnná shellu
  3. name – je proměnná Awk

Podívejme se pozorně na $0 ~ name uvnitř skriptu Awk, ' $0 ~ name {print $0}'. Pamatujte, že když jsme se zabývali porovnávacími operátory Awk v části 4 této série, jedním z porovnávacích operátorů byl vzor hodnoty ~, což znamená: true, pokud hodnota odpovídá vzoru.

output($0) příkazu cat přesměrovaného do Awk odpovídá vzoru (aaronkilik), což je název, který hledáme v /etc/passwd v důsledku toho je operace porovnání pravdivá. Na obrazovce se pak vytiskne řádek obsahující informace o účtu uživatele.

Závěr

Probrali jsme důležitou část funkcí Awk, které nám mohou pomoci používat proměnné prostředí v příkazech Awk. Mnohokrát budete psát malé programy Awk nebo příkazy v rámci skriptů shellu, a proto musíte mít jasno v tom, jak používat proměnné prostředí v příkazech Awk.

V další části série Awk se ponoříme do další kritické části funkcí Awk, kterou jsou příkazy řízení toku. Takže zůstaňte naladěni a pojďme se dál učit a sdílet.