Awk'nin Kabuk Değişkenlerini Kullanmasına Nasıl İzin Verilir - Bölüm 11


Kabuk komut dosyaları yazarken normalde Awk işlemleri gibi diğer küçük programları veya komutları komut dosyalarımıza dahil ederiz. Awk durumunda, bazı değerleri kabuktan Awk işlemlerine aktarmanın yollarını bulmalıyız.

Bu, Awk komutları içindeki kabuk değişkenleri kullanılarak yapılabilir ve serinin bu bölümünde, Awk komutlarına iletmek istediğimiz değerleri içerebilecek kabuk değişkenlerini Awk'un kullanmasına nasıl izin vereceğimizi öğreneceğiz.

Awk'un kabuk değişkenlerini kullanmasını etkinleştirmenin muhtemelen iki yolu vardır:

1. Shell Teklifini Kullanmak

Bir Awk komutunda kabuk değişkeninin değerini değiştirmek için kabuk alıntılamayı gerçekte nasıl kullanabileceğinizi göstermek için bir örneğe bakalım. Bu örnekte, /etc/passwd dosyasında bir kullanıcı adı aramak, kullanıcının hesap bilgilerini filtrelemek ve yazdırmak istiyoruz.

Bu nedenle aşağıdaki içeriğe sahip bir test.sh betiği yazabiliriz:

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

Daha sonra dosyayı kaydedin ve çıkın.

Yukarıdaki test.sh betiğindeki Awk komutunun yorumlanması:

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

"/$kullanıcıadı/ " – Awk komutunda kullanıcı adı kabuk değişkeninin değerini değiştirmek için kullanılan kabuk alıntısı. kullanıcı adı değeri, /etc/passwd dosyasında aranacak kalıptır.

Çift tırnak işaretinin Awk betiğinin dışında olduğunu unutmayın: '{ print $0 }'.

Daha sonra betiği çalıştırılabilir hale getirin ve aşağıdaki gibi çalıştırın:

chmod  +x  test.sh
./text.sh 

Komut dosyasını çalıştırdıktan sonra bir kullanıcı adı girmeniz, geçerli bir kullanıcı adı yazmanız ve Enter tuşuna basmanız istenecektir. Kullanıcının hesap ayrıntılarını /etc/passwd dosyasından aşağıdaki gibi görüntüleyeceksiniz:

2. Awk'un Değişken Atamasını Kullanmak

Bu yöntem, yukarıdaki yönteme göre çok daha basit ve daha iyidir. Yukarıdaki örneği göz önünde bulundurarak işi gerçekleştirmek için basit bir komut çalıştırabiliriz. Bu yöntem kapsamında, bir Awk değişkenine kabuk değişkeni atamak için -v seçeneğini kullanıyoruz.

Öncelikle kullanıcı adı adında bir kabuk değişkeni oluşturun ve ona /etc/passswd dosyasında aramak istediğimiz adı atayın:

username="aaronkilik"

Daha sonra aşağıdaki komutu yazın ve Enter tuşuna basın:

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

Yukarıdaki komutun açıklaması:

  1. -v – Değişken bildirmek için Awk seçeneği
  2. kullanıcı adı – kabuk değişkenidir
  3. isim – Awk değişkenidir

Awk betiğinin içindeki $0 ~ name'e dikkatle bakalım, ' $0 ~ name {print $0}'. Bu serinin 4. Bölümünde Awk karşılaştırma işleçlerini ele aldığımızda, karşılaştırma işleçlerinden birinin değer ~ modeli olduğunu unutmayın; bu şu anlama gelir: değer kalıpla eşleşiyorsa doğru.

Awk'a aktarılan cat komutunun output($0)'ı, /etc/passwd(aaronkilik) kalıbıyla eşleşiyor > sonuç olarak karşılaştırma işlemi doğrudur. Daha sonra kullanıcının hesap bilgilerini içeren satır ekrana yazdırılır.

Çözüm

Awk komutlarında kabuk değişkenlerini kullanmamıza yardımcı olabilecek Awk özelliklerinin önemli bir bölümünü ele aldık. Çoğu zaman, kabuk komut dosyalarının içine küçük Awk programları veya komutları yazacaksınız ve bu nedenle, kabuk değişkenlerini Awk komutları içinde nasıl kullanacağınız konusunda net bir anlayışa sahip olmanız gerekir.

Awk serisinin bir sonraki bölümünde Awk özelliklerinin bir başka kritik bölümüne, yani akış kontrol ifadelerine dalacağız. O halde bizi izlemeye devam edin, öğrenmeye ve paylaşmaya devam edelim.