Zoeken op website

Hoe u Awk kunt toestaan shell-variabelen te gebruiken - Deel 11


Wanneer we shellscripts schrijven, nemen we normaal gesproken andere kleinere programma's of opdrachten, zoals Awk-bewerkingen, op in onze scripts. In het geval van Awk moeten we manieren vinden om bepaalde waarden van de shell door te geven aan Awk-bewerkingen.

Dit kan worden gedaan door shell-variabelen te gebruiken binnen Awk-opdrachten, en in dit deel van de serie zullen we leren hoe we Awk shell-variabelen kunnen laten gebruiken die waarden kunnen bevatten die we willen doorgeven aan Awk-opdrachten.

Er zijn mogelijk twee manieren waarop u Awk kunt inschakelen om shell-variabelen te gebruiken:

1. Shell-citaten gebruiken

Laten we eens kijken naar een voorbeeld om te illustreren hoe u feitelijk shell-citaten kunt gebruiken om de waarde van een shell-variabele in een Awk-opdracht te vervangen. In dit voorbeeld willen we zoeken naar een gebruikersnaam in het bestand /etc/passwd, de accountgegevens van de gebruiker filteren en afdrukken.

Daarom kunnen we een test.sh-script schrijven met de volgende inhoud:

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

Sla het bestand daarna op en sluit af.

Interpretatie van het Awk-commando in het bovenstaande test.sh-script:

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

"/$username/ " – shell-citaten gebruikt om de waarde van shell-variabele gebruikersnaam in het Awk-commando te vervangen. De waarde van gebruikersnaam is het patroon waarnaar moet worden gezocht in het bestand /etc/passwd.

Merk op dat het dubbele aanhalingsteken buiten het Awk-script staat, ‘{ print $0 }’.

Maak het script vervolgens uitvoerbaar en voer het als volgt uit:

chmod  +x  test.sh
./text.sh 

Nadat u het script hebt uitgevoerd, wordt u gevraagd een gebruikersnaam in te voeren, een geldige gebruikersnaam te typen en op Enter te drukken. U kunt de accountgegevens van de gebruiker uit het bestand /etc/passwd bekijken, zoals hieronder:

2. Gebruik van de variabele toewijzing van Awk

Deze methode is veel eenvoudiger en beter in vergelijking met methode één hierboven. Als we het bovenstaande voorbeeld in ogenschouw nemen, kunnen we een eenvoudige opdracht uitvoeren om de klus te klaren. Bij deze methode gebruiken we de optie -v om een shell-variabele aan een Awk-variabele toe te wijzen.

Maak eerst een shellvariabele, gebruikersnaam, en wijs deze de naam toe waarnaar we willen zoeken in het bestand /etc/passswd:

username="aaronkilik"

Typ vervolgens de onderstaande opdracht en druk op Enter:

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

Verklaring van het bovenstaande commando:

  1. -v – Awk-optie om een variabele te declareren
  2. gebruikersnaam – is de shellvariabele
  3. naam – is de Awk-variabele

Laten we eens goed kijken naar $0 ~ naam in het Awk-script, ' $0 ~ naam {print $0}'. Bedenk dat toen we Awk-vergelijkingsoperatoren behandelden in deel 4 van deze serie, een van de vergelijkingsoperatoren waarde ~ patroon was, wat betekent: waar als waarde overeenkomt met het patroon.

De uitvoer($0) van het cat-commando dat naar Awk wordt doorgesluisd, komt overeen met het patroon (aaronkilik), wat de naam is waarnaar we zoeken in /etc/passwd , als resultaat is de vergelijkingsbewerking waar. De regel met de accountgegevens van de gebruiker wordt vervolgens op het scherm afgedrukt.

Conclusie

We hebben een belangrijk gedeelte van Awk-functies besproken, die ons kunnen helpen shell-variabelen binnen Awk-opdrachten te gebruiken. Vaak schrijf je kleine Awk-programma's of -opdrachten binnen shell-scripts en daarom moet je een duidelijk begrip hebben van hoe je shell-variabelen binnen Awk-opdrachten kunt gebruiken.

In het volgende deel van de Awk-serie zullen we ingaan op nog een ander cruciaal gedeelte van de Awk-functies, namelijk de stroomcontrole-instructies. Dus blijf op de hoogte en laten we blijven leren en delen.