Kuidas lubada Awkil kasutada kestamuutujaid - 11. osa


Shelliskriptide kirjutamisel kaasame oma skriptidesse tavaliselt muud väiksemad programmid või käsud, näiteks Awki toimingud. Awki puhul peame leidma viise, kuidas mõned väärtused kestast Awki toimingutesse edastada.

Seda saab teha Awk-käskude shellimuutujate abil ja seeria selles osas õpime, kuidas lubada Awk-l kasutada shellimuutujaid, mis võivad sisaldada väärtusi, mida tahame Awk-käskudele edastada.

Awki saab lubada shellimuutujate kasutamiseks kahel viisil:

1. Shell Quoting'i kasutamine

Heitkem pilk ühele näitele, et illustreerida, kuidas saate tegelikult kasutada shellitsiteerimist shellimuutuja väärtuse asendamiseks Awk käsus. Selles näites soovime otsida failist/etc/passwd kasutajanime, filtreerida ja printida kasutaja konto andmed.

Seetõttu saame kirjutada järgmise sisuga skripti test.sh :

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

Seejärel salvestage fail ja väljuge.

Awk-i tõlgendamine ülaltoodud skriptis test.sh :

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

\"/ $kasutajanimi/\" - shellitsiteerimine, mida kasutatakse käsu Awk shellimuutuja kasutajanime väärtuse asendamiseks. Kasutajanime väärtus on muster, mida tuleb otsida failist/etc/passwd.

Pange tähele, et topeltpakkumine asub väljaspool Awki skripti ‘{print $0}’ .

Seejärel tehke skript käivitatavaks ja käivitage see järgmiselt:

$ chmod  +x  test.sh
$ ./text.sh 

Pärast skripti käivitamist palutakse teil sisestada kasutajanimi, sisestada kehtiv kasutajanimi ja vajutada sisestusklahvi. Kasutaja konto üksikasju saate vaadata failist/etc/passwd järgmiselt:

2. Awki muutuja määramise kasutamine

See meetod on ülaltoodud meetodiga võrreldes palju lihtsam ja parem. Arvestades ülaltoodud näidet, saame töö teostamiseks käivitada lihtsa käsu. Selle meetodi puhul kasutame Awk muutujale shellimuutuja määramiseks valikut -v .

Kõigepealt looge shellimuutuja kasutajanimi ja määrake talle nimi, mida soovime otsida failist /etc/passswd :

username="aaronkilik"

Seejärel tippige allolev käsk ja vajutage sisestusklahvi:

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

Ülaltoodud käsu selgitus:

  1. -v - Awk variant muutuja deklareerimiseks
  2. kasutajanimi - on shellimuutuja
  3. name - on muutuja Awk

Vaatame skeemi Awk sees $0 ~ name hoolikalt, $0 ~ name {print $0} . Pidage meeles, et kui käsitlesime Awki võrdlusoperaatoreid selle seeria 4. osas, oli üks võrdlusoperaatoritest väärtus ~ muster, mis tähendab: true, kui väärtus vastab mustrile.

Awkile viidud kassi käsu output ($0) vastab mustrile (aaronkilik) , mis on nimi, mida me otsime kataloogist/etc/passwd, mille tulemuseks on võrdlustoiming on tõene. Seejärel prinditakse ekraanile rida, mis sisaldab kasutaja kontoteavet.

Järeldus

Oleme käsitlenud olulist jaotist Awk-funktsioonidest, mis aitavad meil kasutada Awk-käskude shellimuutujaid. Mitu korda kirjutate väikesi Awk-programme või käske shelliskriptides ja seetõttu peab teil olema selge arusaam shellimuutujate kasutamisest Awk-käskudes.

Awk-seeria järgmises osas sukeldume veel ühte Awk-funktsioonide kriitilisse ossa, see on voo juhtimise avaldused. Nii et hoidke end kursis ja jätkame õppimist ja jagamist.