top of page

Basit Kabuk Komut Dosyası Oluşturma-2

  • Yazarın fotoğrafı: Huseyin Şahan
    Huseyin Şahan
  • 28 Mar
  • 3 dakikada okunur

Bu blog yazımızda komut yerine geçirme yöntemini ele alacağız ardından komut çıktılarını nasıl yönlendirebileceğimiz hakkında konuşacak ve komutlarla bunları göstereceğiz ve en son olarak pipe(Boru) işaretinin kullanımını göreceğiz. Hazırsanız başlayalım..


Komut Yerine Geçirme

Kabuk betikleri yazarken bir komutun çıktısını bir değişkene atayabilirsiniz. Örneğin zaman bilgisini alan komutu bir değişkene atayarak bu değeri istediğiniz yerde kullanabilirsiniz. bu size oldukça kolaylık sağlayacaktır. Bir komutu bir değişkene atamanın iki yöntemi bulunmaktadır.


  • Backtick karakteri (``)

  • $() formatı


Komutlarınızı bu işaretler arasına ekleyerek kabuğa bunun bir değişken adı değil bir komut olduğunu ifade edebilirsiniz.

Örnek olarak şu komut ile tarih komutu ile elde ettiğiniz değeri bir değişkene atayın:

darkside@debian:~$ dateNow=`date`

Burada dikkat edin tek tırnak değil ters tırnak işareti olmalıdır. Aynı şekilde:

darkside@debian:~$ dateNow=$(date)

şeklinde değere bir komutun çıktısını verebilirsiniz.


Sizinle heyecan verici bir örnek yapalım. Bu örnekte bir log dosyasının adını hergün değiştirelim. Yani hergün yeni bir dosya oluşacak. Aşağıda yeni bir dosya oluşturun:

darkside@debian:~/scriptfiles$ touch betikdosyası3

Bu dosyaya çalıştırma izni ekleyin:

darkside@debian:~/scriptfiles$ chmod u+x betikdosyası3

Aşağıdaki gibi betik kodunu yazalım:

#!/bin/bash
# /usr/bin dizin listesini bir log dosyasına kopyala
today=$(date +%y%m%d)
ls /usr/bin -al > log.$today

Burada date komutundan sonraki değerler yıl, ay ve gün olarak bastırılacağı anlamına geliyor. Ardından komutun çıktısını bir dosyaya yönlendirip bu dosyanın ismini o günün yıl ay ve gün değerlerinin yan yana gelmesiyle oluşan değerle ayarlıyoruz. Bu betik dosyası her gün çalıştırılınca farklı dosyalar oluşacak ve /usr/bin içindeki dosyaları log dosyası olarak yazdıracaktır.


Girdi ve Çıktı Yönlendirme

Bir komutun çıtısını her zaman terminale basılıyor zannedebilirsiniz. Ancak durum böyle değildir. Kabuğun varsayılan davranışı çıktıyı terminalde gösterir. Ancak biz komutların çıktısını bir dosyaya yönlendirebilir veya bir dosyadaki değerleri bir komuta yönlendirerek bu değerleri işlemesini sağlayabiliriz.


Çıktı Yönlendirme

Bir komutun çıktısını bir dosyaya yönlendirmek isteyebilirsiniz. Bunu yapmak için > iaşretini kullanacağız. Bu okun yönü verinin akış yönünü temsil etmektedir.

darkside@debian:~/scriptfiles$ date > datefile

Bu date komutunun çıktısı br dosyaya yönlenmiştir. Bu dosyayı cat ile okursanız değeri görebilirsiniz. Veriler okun olduğu yöne doğru ilerlemiştir.


Girdi Yönlendirme

Aynı mantıkla bir dosyadaki değerleri bir araca veya komuta yönlendirebiliriz. Örnek bir wc komutu verilmiştir. Bu komut dosyadaki verilerin sayısını verir.

  • Metindeki satır sayısı

  • Metindeki kelime sayısı

  • Metindeki byte sayısı

darkside@debian:~/scriptfiles$ wc < datefile

İşte komutun çıktısı:

1  6 29

Metin 29 bayt ve 6 kellime ayrıca 1 satırdan oluşuyormuş.


Geleneksel metin dosyasını doğrudan okumak yerine satır içi girdi yönlendirmesi yapabiliriz. Bu verileri doğrudan terminale geirip yönlendirme yapmanıza olanak sağlar.

Satır içi girdi yönlendirmesi için << sembolü kullanılır. Bu sembolün ardından bir "metin işaretçisi" belirlenir. Bu işaretçi, girdi verisinin başlangıcını ve bitişini belirler. Genellikle, bir kelime ya da etiket seçilir, örneğin EOF (End of File – Dosya Sonu) gibi.


$ wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
3 9 42
$

Şeklinde satıra EOF yazarak bu dosya sonu işaretçisi olacak ve girişi sonlandıracaktır.


Pipe İşareti


Pipe sembolü, iki dikey çizgiden oluşur (|). Bu sembol, bir komutun çıktısını başka bir komutun girdi olarak göndermek için kullanılır.

command1 | command2

Bu komut, command1 komutunun çıktısını alır ve doğrudan command2 komutuna gönderir. Yani, veriler bir dosyaya yönlendirilmeden bir komuttan diğerine aktarılır. Böylece, işlemler daha hızlı ve verimli bir şekilde gerçekleşir.


Aşağıda örnek komut verilmiş ve açıklanmıştır:

$ rpm -qa | sort

aşlangıçta, rpm -qa komutunun çıktısı bir dosyaya yönlendirilmiş ve sonra o dosya sıralanmıştı. Bunun yerine, pipe kullanarak aynı işlemi daha kolay bir şekilde yapabiliriz:

  • rpm -qa komutu, sistemde yüklü olan yazılım paketlerini listeler.

  • Bu liste, | sembolüyle doğrudan sort komutuna gönderilir.

  • sort komutu, bu listeyi alfabetik olarak sıralar ve sonucu doğrudan ekranda gösterir.


Veri çok fazla uzarsa bunu sayfalayarak gösterebiliriz:

$ rpm -qa | sort | more

Bu komut şunları yapar:

  • rpm -qa ile sistemdeki yazılımlar listelenir.

  • sort komutu ile liste sıralanır.

  • more komutu ile sıralanan liste, ekranda bir sayfada bir kez görüntülenir. Bu sayede tüm listeyi bir anda görmek zorunda kalmazsınız. Sayfa sayfa geçiş yapabilirsiniz.


Bu sayede birden fazla pipe işaretinin kullanımını görmüş olduk. ayrıca hem pipe hem giriş yönelndirme kullanarak işlemler yapabiliriz.

$ rpm -qa | sort > rpm.list
$ more rpm.list
  • rpm -qa | sort komutu, sistemdeki yazılım paketlerini sıralar.

  • Çıktıyı > sembolüyle rpm.list adlı bir dosyaya yönlendirir.

  • more rpm.list komutu ile dosyanın içeriği ekranınıza sayfa sayfa yazdırılır.


Bu blog yazımızda komut yerine geçirme, çıktı yönlendirme ve pipe (Boru) işaretinin kullanımlarını detaylı ve işinize yarar biçimde sunduk.


Sonraki blog yazılarında görüşmek üzere...

Comments


bottom of page