Awk-a gabyk üýtgeýjilerini ulanmaga nädip rugsat bermeli - 11-nji bölüm


Gabyk skriptlerini ýazanymyzda, adatça skriptlerimize Awk amallary ýaly beýleki kiçi programmalary ýa-da buýruklary goşýarys. Awk meselesinde, gabykdan Awk amallaryna käbir bahalary geçirmegiň ýollaryny tapmalydyrys.

Bu, Awk buýruklarynyň içindäki gabyk üýtgeýjilerini ulanmak arkaly amala aşyrylyp bilner we seriýanyň bu böleginde Awk buýruklaryna geçmek isleýän bahalarymyzy öz içine alyp bilýän gabyk üýtgeýjilerini ulanmaga nädip rugsat bermelidigini öwreneris.

Awk-a gabyk üýtgeýjilerini ulanmagyň iki usuly bar:

1. “Shell Quoting” ulanmak

Awk buýrugynda gabyk üýtgeýjisiniň bahasyny çalyşmak üçin gabyk sitatasyny nädip ulanyp boljakdygyny görkezmek üçin bir meselä seredeliň. Bu mysalda/etc/passwd faýlynda ulanyjy adyny gözlemek, ulanyjynyň hasaby maglumatlaryny süzmek we çap etmek isleýäris.

Şonuň üçin aşakdaky mazmunly test.sh skriptini ýazyp bileris:

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

Ondan soň faýly ýazdyryň we çykyň.

Awk buýrugynyň ýokardaky test.sh skriptinde düşündirilmegi:

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

\/$username/\ - Awk buýrugynda gabyk üýtgeýän ulanyjy adynyň bahasyny çalyşmak üçin ulanylýan gabyk sitatasy. Ulanyjy adynyň gymmaty/etc/passwd faýlynda gözlenmeli nagyş.

Jübüt sitata Awk skriptiniň daşynda, '{$0} çap et' daşynda.

Soňra skripti ýerine ýetirip, aşakdaky ýaly işlediň:

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

Scriptazgy işledilenden soň, ulanyjy adyny girizmek, dogry ulanyjy adyny ýazmak we Enter düwmesini basmak soralar. Ulanyjynyň hasaby maglumatlaryny/etc/passwd faýlyndan aşakdaky ýaly görersiňiz:

2. Awkyň üýtgeýän belligini ulanmak

Bu usul ýokardaky usul bilen deňeşdirilende has ýönekeý we has gowudyr. Aboveokardaky mysaly göz öňünde tutup, işi ýerine ýetirmek üçin ýönekeý buýrugy işledip bileris. Bu usul boýunça, gabyk üýtgeýjisini Awk üýtgeýjisine bellemek üçin -v opsiýasyny ulanýarys.

Ilki bilen, ulanyjy ady gabyk üýtgeýjisini dörediň we /etc/passswd faýlynda gözlemek isleýän adymyzy belläň:

username="aaronkilik"

Soňra aşakdaky buýrugy ýazyň we Enter basyň:

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

Aboveokardaky buýrugyň düşündirişi:

  1. -v - üýtgeýjini yglan etmek üçin awk opsiýasy
  2. ulanyjy ady - gabyk üýtgeýjisi
  3. name - Awk üýtgeýjisi

Awk skriptiniň içindäki $0 ~ name , $0 ~ name {print $0} seresaplylyk bilen seredeliň. Thisadyňyzdan çykarmaň, bu tapgyryň 4-nji bölüminde Awk deňeşdirme operatorlaryny açanymyzda, deňeşdirme operatorlarynyň biri ~ nagşydy, bu bolsa bahanyň nagşa gabat gelýän bolsa dogrydygyny ýadyňyzdan çykarmaň.

Awk-a iberilen pişik buýrugynyň çykyşy ($0) (aaronkilik) görnüşine gabat gelýär, netijede/etc/passwd-de gözleýän adymyz. deňeşdirme amaly dogry. Ulanyjynyň hasaby maglumatlary öz içine alýan setir soňra ekranda çap edilýär.

Netije

Awk buýruklarynyň içinde gabyk üýtgeýjilerini ulanmaga kömek edip biljek Awk aýratynlyklarynyň möhüm bölümini açdyk. Köp gezek gabyk skriptleriniň içinde kiçi Awk programmalaryny ýa-da buýruklaryny ýazarsyňyz we şonuň üçin Awk buýruklarynyň içinde gabyk üýtgeýjilerini nädip ulanmalydygyna anyk düşünmeli.

“Awk” seriýasynyň indiki bölüminde, “Awk” aýratynlyklarynyň ýene bir möhüm bölümine, ýagny akym gözegçiligi jümlelerine geçeris. Şonuň üçin üns beriň we öwrenmegi we paýlaşmagy dowam etdireliň.