top of page

Basit Kabuk Komut Dosyası Oluşturma-1

  • Yazarın fotoğrafı: Huseyin Şahan
    Huseyin Şahan
  • 26 Mar
  • 5 dakikada okunur

Bu blog yazımızda sizlere basit kabuk komutlarını nasıl yazabileceğinizi göstereceğiz. Komutlarımızı önce terminalde yazıyorken artık işlerimizi kolaylaştıracağı için bir betik dosyası yazacağız. Hazırsanız başlayalım.


Terminalde Çoklu Komut Çalıştırma

Daha önceki bloglarımızda terminalde çoklu komut çalıştırmak için araya noktalı virgül(;) koyarak yazmanız gerektiğini söylemiştik. İşte basit bir örnek olarak iki komutu çalıştıralım.

darkside@debian:~$ ls; pwd

Burada ; ile komutları ayırarak ana kabuk üzerinde işlemlerimizi çalıştırmıştık. Ancak artık terminale sürekli aynı komutları girerek işlemlerimizi uzatmanın hiçbir anlamı yok. Bu komutları bir dosyaya yazarak zamandan ve zahmetten kurtulmuş olacağız.


Kabuk Betik Dosyası Hazırlama

Kabuk betik dosyaları oluşturmadan önce betik dosyalarımızı tutan bir klasör oluşturalım. Ana dizininize gidin ve yeni bir klasör oluşturun.

darkside@debian:~$ mkdir scriptfiles

Daha sonra klasörün içine girin. Artık dosyalarımızı bu klasör içine yazacağız.


O zaman yeni bir betik dosyası oluşturalım. Bunun için touch komutunu kullanabilirsiniz. Bu komut yeni bir dosya oluşturacaktır. betikdosyası1 adında bir dosya oluşturun.

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

Daha sonra bir metin düzenleyici ile bu dosyayı açın. Artık bu dosya içerisine betikleri yazmaya hazırız.


Kabuk betikleri yazarken dosyanın ilk satırına hangi kabuk türünü kullanacağını belirtmelisiniz. İlk satır aşağıdaki gibi olmalıdır.

#! /bin/bash

Normal bir kabuk satırı dosyasında # işareti yorum yapmak için kullanılmaktadır. Shell betiğinde yorum satırları görmezden gelinir. Ancak betik dosyasının bu ilk satırı özel bir durumdur. #(Diyez) ve !(Ünlem) işareti birlikte kullanıldığında hangi kabukta çalışılacağını belirler.


Kabuk türü belirtildikten sonra, her satıra komutlar yazılır ve her satırdan sonra bir satır başı (arriage return) eklenir. Yorumlar ise #(Diyez) işareti kullanılarak eklenebilir. Aşağıdaki gibi bir komut girebilirsiniz.

#!/bin/bash

# Bu betik tarihi ve kimlerin oturum açtığını gösterir
date
who

Artık bir betik dosyamız hazır oldu. Dosyayı kaydedip çıkabilirsiniz. Burayı kısacatekrardan özetlemek gerekirse dosyanın ilk başında # ve ! işaretlerini kullanarak hangi kabuk türünü kullanacağımızı belirtiyoruz. Normalde 3 işareti yorumlar için kullanılır. Ancak iki birlikte olduğunda kabuk türünü belirler. # işareti ile yorumumuzu yaptık ardından komutlarımızı her biri ayrı satırda olacak şekilde ekledik.


Bu dosyayı çalıştırmanın iki yolu bulunuyor. birinci yöntem PATH değişkenine dosyamızın bulunduğu dizini ekleyip. Ardından dosya ismini yazarak çalıştırmak. İkinci yöntem ise bulunduğumuz dizinde dosyanın adını belirtmek. Biz burada ikinci yöntemi kullanacağız. birinci yöntemin nasıl olduğunu

Blogumuzu okuyarak öğrenebilirsiniz. Neyse devam edelim ve komut dosyamızı çalıştırmaya çalışalım.

darkside@debian:~/scriptfiles$ ./betikdosyası1

Burada tek nokta operatorü kullanarak bulunduğumuz dizini belirtiyoruz. Bu sayede kabuğa tam yolu vermiş oluyoruz. Ancak burada erişim engeli verebilir. Çünkü varsayılan olarak kullanıcıya çalıştırma izni verilmiyor. Bu ayarı umask komutu ile ayarlayabiliyorduk.


Bu sorunu çözmek için chmod ile kullanıcıya çalıştırma izni vereceğiz.

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

Bu sayede kullanıcıya çalıştırma izni verdik. Bunu kontrol edelim.

darkside@debian:~/scriptfiles$ ls -l

Aşağıda görüldüğü üzere kullanıcı artık çalıştırma yetkisine sahiptir.

-rwxr--r-- 1 darkside darkside 86 Mar 25 16:22 betikdosyası1

İzinlerin ne olduğunu bilmiyorsanız yukarıda bağlantıda verdiğimiz blog yazımızı okuyun bu size izinler hakkında kapsamlı bir bilgi sunacaktır.


Artık dosyamızı çalıştırmayı deneyelim. Bu izni verdikten sonra dosyamız çalışacaktır.

darkside@debian:~/scriptfiles$ ./betikdosyası1
ree

Burada date ve who komutlarını çalıştırmıştır. İstediğiniz zaman bu dosyayı çalıştırarak zahmet etmeden çıktıları alabiliriz.


echo Komutu İle Çalışma

Bazen kabukta bir uyarı vermek veya kullanıcı ile etkileşime girmek isteyebilirsiniz. Bunun için echo komutunu kullanacağız. Bu komut kendinden sonra gelen metni ekrana basacaktır. Aşağıda kabuk üzerinde kullanımı verilmiştir. Merak etmeyin daha sonra betikleri dosyaya yazacağız. İşte örnek bir komut verilmiştir. Kabukta bu komutun çıktısını görebilirsiniz.

darkside@debian:~/scriptfiles$ echo Bu bir test mesajıdır

Bu komut ile metnin çıktısını görüntüleyebliriz. Ancak metinde alıntı işaretlerini(quotes) kullanmanız gerekirse bu işleri karmaşık hale getirebilir. Bu örneği göstermek için ingilizce bir cümle kullandık.

darkside@debian:~/scriptfiles$  echo Let's see if this'll work

Kabukta bu alıntı işaretleri algılanmayacak ve metni tırnak işaretleri olmadan gösterecektir.

Lets see if thisll work

Eğer bu şekilde tek tırnak kullanmak isterseniz bu cümleyi çift tırnak ile sarmalayın. Aşağıdaki örnek doğru bir şekilde cümleyi bastıracak ve tek tırnak işaretlerini algılayacaktır.

darkside@debian:~/scriptfiles$ echo "Let's see if this'll work"

Burada ifade düzgün bir şekilde bastırılmış olacaktır.


O zaman bizim bir betik dosyamız vardı. Bu dosyaya echo komutlarınıda ekleyerek hangi çıktının ne anlama geldiğini yazdırabiliriz.

#! /bin/bash
#Bu betik tarihi ve kimlerin oturum açtığını gösterir.
echo Zaman ve tarih:
date
echo "Sisteme kimlerin girdiğini görelim :"
who

Bu komut dosyasını çalıştırısanız aşağıdaki gibi bir çıktı oluşturur.

ree

Ancak echo komutu bir alt satıra geçiyor. Bunu engellemek ve echo ve komutların çıktısını aynı satırda gösterebiliriz.

#! /bin/bash
#Bu betik tarihi ve kimlerin oturum açtığını gösterir.
echo -n Zaman ve tarih:
date
echo -n "Sisteme kimlerin girdiğini görelim :"
who

Burada -n parametresini kullanarak echo komutunun bir alt satıra geçmesine engel olduk. Bu sayede daha anlaşılabilir bir çıktı elde edebiliriz.


Kullanıcı Değişkenleri ve Parametreler


Örneğin betik dosyanızda bulunduğunuz şehri sürekli kullanmanız gerekiyor. Ancak bu şehri daha sonra değiştirmeniz gerekiyor ve bu dosyaya yaklaşık 20 kez şehrin ismini yazıp bunu sürekli değiştirmek mantıklı olmayacaktır. ancak bu sorunu çözmek için değişken dediğimiz veri tutabilen ve daha kolay değiştirilebilen türler geliştirilmiştir. Kabuk satırında değişkenleri iki gruba ayırabiliriz. Bunlar çevresel değişkenler ve kullanıcı değişkenleri. burada daha önceki blog yazılarımızda çevresel değişkenlerin ne olduğunu anlatmıştık. Burada değineceğimiz kısım kullanıcı değişkenleri olacaktır. Basit kullanımları göreceğiz. Ayrıca çevresel değişkenleri de burada kullanacağız. Çevresel değişkenler için:

Blog yazımızı okuyun.


Aşağıdaki örnekte bir çevresel değişken kullanarak ana dizinimizi ve kullandığımız kabuk türünü görüntüleyebilirz. Değişkenleri $ işareti kullanarak yazdırabiliriz.

#! /bin/bash
echo -n "Kullandığımız kabuk türü :"
echo $SHELL
echo -n "$USER kullanıcısının ana dizini:"
echo $HOME

Burada $SHELL ile kabuk türünü, $USER ile geçerli kullanıcıyı ve $HOME ile kullanıcının ana dizinini görebiliriz. Bu değişkenleri $ ile yazdırmanız gerekir. Ancak aşağıdaki gibi bir örneği ele alalım.

#! /bin/bash
echo -n "$USER kullanıcısının $15 parası var:"

Burada $ işareti ile komut $1 işaretinin bir parametre olduğunu kabul eder. $1 birinci parametre $2 ikinci parametre $3 üçüncü parametre şeklinde devam eder burada komutu aşağıdaki gibi çalıştırısanız:

darkside@debian:~/scriptfiles$ ./betikdosyası2

Burada parametre olmadığından $1 boş geçilecek sadece 5 yazılacaktır.

darkside kullanıcısının 5 parası var

Burada birinci parametre olmadığından bu şekilde yazılmıştır. Peki neden burada $15 15. parametreyi temsil etmiyorda sadece $1 olarak algıladığını merak edebilirsiniz. Bunun nedeni kabuk burada sadece ilk karakteri algılayacaktır. 1-9 arasında tek haneli sayılarda bir proplem olmaz ancak $15 gibi 15. parametreyi temsil etmek isterseniz bunu ${15} olarak bildirmeniz gerekir. Bu 15. parametreyi temsil edecektir. Bu parametrelere positional parametre denir.

echo "Birinci parametre: $1"
echo "İkinci parametre: $2"

Dosyanın adını yazdırmak için:

echo "Script Adı: $0"

Scriptte verilen toplam parametre sayısı:

echo "Parametre sayısı: $#"

Çalışan scriptin PID(Process Id numarası):

echo "Bu script'in PID'si: $$"

gibi parametreler positional parametrelerdir. Bunları gerektiği durumlarda kullanacağız.


Şimdi dosyaya bir parametre verelim ve bakalım birinci parametreyi basacak mı ? Önceki örneğimiz $15 olan dosyanızda durdun ve çalıştırmak için parametre ile verin:

darkside@debian:~/scriptfiles$ ./betikdosyası2 23

Evet burada birinci parametreyi verdik bu 23 sayısıdır. Bakalım çıktı nasıl ?

darkside kullanıcısının 235 parası var:/home/darkside

OO, bakın $1 yerine birinci parametremiz olan 23 sayısını koymuş. İşte ilk parametreyi okudu ve yerine koydu. Siz isterseniz $2 yazarak ikinci parametreyi algılamasını sağlayabilirsiniz. Burada parametrelerin ne olduğunu ve nasıl kullanmanız gerektiğini verdik. Aklınızı karıştıran bir soru olursa lütfen yorumlarda bildirin.


Şimdi parametrelerin ne olduğunu tartıştığımıza göre son olarak biraz kullanıcı değişkenleri oluşturalım ve blogumuzu sonlandıralım.


Aşağıdaki örneklerde bunları nasıl yapabileceğiniz verilmiştir.

#!/bin/bash
# İlk değişken oluşturma ve değer atama
name="Ahmet"
age=30
# Bir değişkeni başka bir değişkene atama
user_name=$name
user_age=$age
# Ekrana yazdırma
echo "Kullanıcı adı: $user_name"
echo "Yaş: $user_age"

Bu komut dosyasında değişkenlere değer atadık ve bir değişkene diğer bir değişkeni atadık. Ardından bu değişkenleri yazdırdık. Siz bu örnekleri istediğiniz gibi değiştirebilirsiniz.



Bu blog yazımızda basit bir betik dosyası oluşturmayı ve bu betik dosyasına nasıl parametre vereceğimizi ve bu parametreleri dosya içinde nasıl okuyabileceğimizi öğrendik. Ardından basit kullanıcı değişkenleri oluşturup yazdırdık.


Bir sonraki yazılarımızda görüşmek üzere hoşçakalın....



Comments


bottom of page