Weboldal keresés

Az Awk shell-változók használatának engedélyezése – 11. rész


Amikor shell szkripteket írunk, általában más kisebb programokat vagy parancsokat, például Awk műveleteket is beiktatunk a szkriptjeinkbe. Az Awk esetében meg kell találnunk a módját annak, hogy bizonyos értékeket átadjunk a shellből az Awk műveleteknek.

Ezt megtehetjük shell-változók használatával az Awk parancsokon belül, és a sorozat ezen részében megtudjuk, hogyan engedélyezhetjük az Awk számára, hogy olyan shell-változókat használjon, amelyek tartalmazhatnak olyan értékeket, amelyeket át szeretnénk adni az Awk parancsoknak.

Kétféleképpen engedélyezheti az Awk számára a shell-változók használatát:

1. Shell Qoting használata

Vessünk egy pillantást egy példára annak szemléltetésére, hogy valójában hogyan lehet shell-idézetet használni egy shell-változó értékének helyettesítésére egy Awk parancsban. Ebben a példában egy felhasználónevet szeretnénk keresni az /etc/passwd fájlban, szűrni és kinyomtatni a felhasználó fiókinformációit.

Ezért írhatunk egy test.sh szkriptet a következő tartalommal:

#!/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 }'

Ezután mentse el a fájlt, és lépjen ki.

Az Awk parancs értelmezése a fenti test.sh szkriptben:

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

"/$username/ " – shell-idézőjel, amelyet a username shell-változó értékének helyettesítésére használnak az Awk parancsban. A felhasználónév értéke az /etc/passwd fájlban keresendő minta.

Vegye figyelembe, hogy a dupla idézőjel az Awk szkripten kívül található, a ‘{ print $0 }’.

Ezután tegye futtathatóvá a szkriptet, és futtassa a következőképpen:

chmod  +x  test.sh
./text.sh 

A szkript futtatása után a rendszer kéri, hogy írjon be egy felhasználónevet, írjon be egy érvényes felhasználónevet, majd nyomja meg az Enter billentyűt. Az alábbiak szerint tekintheti meg a felhasználói fiók adatait az /etc/passwd fájlból:

2. Az Awk változó hozzárendelésének használata

Ez a módszer sokkal egyszerűbb és jobb a fenti egyikhez képest. A fenti példát figyelembe véve egy egyszerű parancsot futtathatunk a feladat végrehajtásához. Ennél a metódusnál a -v opciót használjuk, hogy shell-változót rendeljünk egy Awk-változóhoz.

Először hozzon létre egy shell változót, a username-t, és rendelje hozzá azt a nevet, amelyet keresni akarunk az /etc/passswd fájlban:

username="aaronkilik"

Ezután írja be az alábbi parancsot, és nyomja meg az Enter billentyűt:

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

A fenti parancs magyarázata:

  1. -v – Awk opció egy változó deklarálásához
  2. felhasználónév – a shell változó
  3. név – az Awk változó

Nézzük meg alaposan a $0 ~ name elemet az Awk szkriptben, a ' $0 ~ name {print $0}'. Ne feledje, amikor ennek a sorozatnak a 4. részében foglalkoztunk az Awk összehasonlító operátorokkal, az egyik összehasonlító operátor a value ~ minta volt, ami azt jelenti: igaz, ha az érték megegyezik a mintával.

Az Awk-ba küldött cat parancs output($0) értéke megegyezik az (aaronkilik) mintával, amely az a név, amit keresünk az /etc/passwd fájlban. >, ennek eredményeként az összehasonlítási művelet igaz. A felhasználó fiókinformációit tartalmazó sor ezután megjelenik a képernyőn.

Következtetés

Lefedtük az Awk szolgáltatásainak egy fontos részét, amelyek segíthetnek a shell-változók használatában az Awk parancsokon belül. Sokszor kis Awk-programokat vagy parancsokat írunk a shell-szkriptekben, ezért világosan meg kell értenünk, hogyan kell használni a shell-változókat az Awk-parancsokon belül.

Az Awk-sorozat következő részében az Awk-szolgáltatások egy másik kritikus részébe, az áramlásvezérlési utasításokba merülünk bele. Maradjunk tehát előre, és folytassuk a tanulást és a megosztást.