Linux'ta Basit Kabuk Komut Dosyaları Nasıl Oluşturulur


Kabuk komut dosyaları oluşturmak, Linux kullanıcılarının parmaklarının ucunda olması gereken en önemli becerilerden biridir. Kabuk komut dosyaları, aksi takdirde satır satır yürütülmesi sıkıcı olabilecek tekrarlanan görevlerin otomatikleştirilmesinde çok büyük bir rol oynar.

Bu eğitimde, her Linux kullanıcısının sahip olması gereken temel kabuk komut dosyası oluşturma işlemlerinden bazılarını vurgulayacağız.

1. Basit Bir Kabuk Komut Dosyası Oluşturun

Kabuk komut dosyası, ASCII metnini içeren bir dosyadır. Basit bir kabuk betiği oluşturarak başlayacağız ve bunu yapmak için bir metin düzenleyici kullanacağız. Hem komut satırı hem de GUI tabanlı çok sayıda metin düzenleyici vardır. Bu kılavuz için vim editörünü kullanacağız.

Yürütüldüğünde "Merhaba dünya" görüntüleyen basit bir komut dosyası oluşturarak başlayacağız.

vim hello.sh

Aşağıdaki içeriği dosyaya yapıştırın ve kaydedin.

#!/bin/bash
Print Hello world message
echo "Hello World!"

Shell betiğini satır satır inceleyelim.

  • İlk satır – #!/bin/bash – shebang başlığı olarak bilinir. Bu, betiği yorumlamak için hangi programın kullanılacağını belirten özel bir yapıdır. Bu durumda bu, /bin/bash ile gösterilen bash kabuğu olacaktır. #!/usr/bin/python3 ile gösterilen Python ve shebang başlığı ile gösterilen Perl gibi başka kodlama dilleri de vardır. #!/usr/bin/perl.
  • İkinci satır bir yorumdur. Yorum, bir kabuk betiğinin ne yaptığını ve betik çalıştırıldığında yürütülmediğini açıklayan bir ifadedir. Yorumların önünde her zaman # karma işareti bulunur.
  • Son satır terminalde 'Merhaba Dünya' mesajını yazdıran komuttur.

Bir sonraki adım, gösterildiği gibi chmod komutunu kullanarak yürütme izni atayarak betiği çalıştırılabilir hale getirmektir.

chmod +x  hello.sh

Son olarak, aşağıdaki komutlardan birini kullanarak kabuk betiğini çalıştırın:

bash hello.sh
OR
./hello.sh

2. Kodu Çalıştırmak İçin Koşullu İfadeleri Kullanmak

Diğer programlama dilleri gibi, bash komut dosyası oluşturmada da karar vermek için koşullu ifadeler kullanılır, ancak sözdiziminde yalnızca küçük bir değişiklik vardır. if, if-else ve elif koşullu ifadelerini ele alacağız.

Yalnızca if İfadesi örneği

if ifadesi tek veya birden fazla koşulu test etmek için kullanılabilir. Tek bir koşulu test etmek için if ifadesinin temel kullanımıyla başlayacağız. if ifadesi if ... fi blokları tarafından tanımlanır.

if command
then
  statement
fi

Aşağıdaki kabuk betiğine bir göz atalım.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

Yukarıdaki kabuk betiği kullanıcıdan bir puan girmesini ister ve bu puan daha sonra x değişkeninde saklanır. Puan 70'e karşılık gelirse, komut dosyası "İyi iş çıkardınız!" çıktısını döndürür. == karşılaştırma operatörü, x değişkeninde saklanan girilen puanın 100'e eşdeğer olup olmadığını test etmek için kullanılır.

Kullanabileceğiniz diğer karşılaştırma operatörleri şunları içerir:

  • -eq – Eşittir
  • -ne – Eşit değil
  • -lt – Küçüktür
  • -le – Küçük veya eşittir
  • -lt – Küçüktür
  • -ge – Büyüktür veya eşittir

Örneğin, aşağıdaki if-statement bloğu, giriş puanı 50'den küçükse "Daha Çok Çalış" ifadesini yazdırır.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

if-else ifadesi örneği

2 olası sonucun olduğu durumlarda: – şu ya da bu – if-else ifadesi kullanışlıdır.

if command
then
  statement1
else
  statement2
fi

Aşağıdaki komut dosyası giriş puanını okur ve 70'e eşit veya büyük olup olmadığını kontrol eder.

Puan 70'e eşit veya büyükse "Harika iş çıkardınız, geçtiniz!" mesajını alırsınız. Ancak puan 70'in altına düşerse "Başarısız oldunuz" çıktısı yazdırılacaktır.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

if-elif-else İfadesi Örneği

Birden fazla koşulun ve farklı sonuçların olduğu senaryolarda if-elif-else ifadesi kullanılır. Bu ifade aşağıdaki formatı alır.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Örneğin, girilen sayının 90, 60 veya 30 olup olmadığını kontrol eden bir piyango komut dosyamız var.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -eq 90 ]];
then
  echo “You have won the First Prize”

elif [[ $x -eq 60 ]];
then
  echo “You have won the Second Prize”

elif [[ $x -eq 30 ]];
then 
  echo “You have won the Second Prize”
else
  echo “Please try again”
fi

3. If İfadesini AND Mantığıyla Kullanmak

İki koşulun karşılanması durumunda bir görevi yürütmek için VE mantık operatörünün yanında if ifadesini kullanabilirsiniz. && operatörü AND mantığını belirtmek için kullanılır.

#!/bin/bash

echo 'Please Enter your user_id'
read user_id

echo 'Please Enter your tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo “Login successful”
else
  echo “Login failure”
fi

5. If İfadesini VEYA Mantığıyla Kullanmak

|| sembolüyle temsil edilen VEYA mantığını kullanırken, beklenen sonuçları vermek için koşullardan herhangi birinin komut dosyasında karşılanması gerekir.

#!/bin/bash

echo 'Please enter a random number'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Congratulations! You’ve won'
else
 echo 'Sorry, try again'
fi

Döngü Yapılarını Kullanın

Bash döngüleri, kullanıcıların belirli bir sonuç elde edilene kadar bir dizi görevi gerçekleştirmesine olanak tanır. Bu, tekrarlanan görevlerin yerine getirilmesinde kullanışlıdır. Bu bölümde diğer programlama dillerinde de bulabileceğiniz bazı döngülere göz atacağız.

Döngü sırasında

Bu, üzerinde çalışılması en kolay döngülerden biridir. Sözdizimi oldukça basittir:

while  <some test>
do
 commands
done

Aşağıdaki while döngüsü çalıştırıldığında 1'den 10'a kadar tüm sayıları listeler.

#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Hadi while döngüsünü tartışalım:

counter değişkeni 1 olarak başlatılır. Değişken 10'dan küçük veya ona eşit olduğunda, sayacın değeri koşul sağlanana kadar artırılacaktır. echo $counter satırı 1'den 10'a kadar tüm sayıları yazdırır.

Döngü için

While döngüsü gibi, kodu yinelemeli olarak yürütmek için for döngüsü kullanılır. Yani Kullanıcı tarafından tanımlanan kod yürütmeyi mümkün olduğu kadar tekrarlayın.

Sözdizimi şöyledir:

for var in 1 2 3 4 5 N
do
 command1
 command2
done

Aşağıdaki for döngüsü 1'den 10'a kadar yinelenir ve değerlerini ekranda işler.

Bunu başarmanın daha iyi bir yolu, tüm sayıları yazmak yerine gösterildiği gibi çift küme parantezlerini { kullanarak bir aralık tanımlamaktır.

#!/bin/bash
Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Bash Konumsal Parametreler

Konumsal parametre, değerler kabuğa iletildiğinde ancak atanamadığında kodda başvurulan özel bir değişkendir. Konumsal parametreler $0 $1 $2 $3 …… ile $9 arasında değişir. $9 değerinin ötesinde, parametrelerin küme parantezleri içine alınması gerekir; örneğin $ {10}, $ {11} … vb.

Betiği çalıştırırken ilk konumsal parametre olan $0, kabuk betiğinin adını alır. $1 parametresi terminalde iletilen ilk değişkeni alır, $2 ikinciyi, $3 üçüncüyü vb. alır.

Gösterildiği gibi bir test.sh betiği oluşturalım.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

Daha sonra betiği çalıştırın ve argüman olarak birinci ve ikinci adı sağlayın:

bash test.sh James Kiarie

Çıktıdan, yazdırılan ilk değişkenin kabuk betiğinin adı (bu durumda test.sh) olduğunu görebiliriz. Daha sonra, kabuk komut dosyasında tanımlanan konumsal parametrelere karşılık gelen adlar yazdırılır.

Konumsal parametreler, bir değişkene açıkça bir değer atamak yerine, girilen verileri özelleştirmenize yardımcı olmaları açısından kullanışlıdır.

Kabuk Komut Çıkış Kodları

Basit bir soruyu yanıtlayarak başlayalım: Çıkış kodu nedir?

Bir kullanıcı veya kabuk betiği tarafından kabukta yürütülen her komutun bir çıkış durumu vardır. Çıkış durumu bir tam sayıdır.

0 çıkış durumu, komutun hatasız bir şekilde başarıyla yürütüldüğü anlamına gelir. 1 ila 255 arasındaki herhangi bir değer, komutun başarısız olduğunu veya başarıyla yürütülmediğini gösterir.

Bir komutun çıkış durumunu bulmak için $? Kabuk değişkenini kullanın.

1 çıkış durumu, genel bir hataya veya dosyaların sudo izinleri olmadan düzenlenmesi gibi izin verilmeyen hatalara işaret eder.

2 çıkış durumu, bir komutun veya yerleşik kabuk değişkeninin yanlış kullanımına işaret eder.

127 çıkış durumu, genellikle 'komut bulunamadı' hatasına neden olan geçersiz bir komuta işaret eder.

Bir Komut Dosyasındaki Kabuk Komutlarının Çıktısını İşleme

Bash komut dosyası oluşturmada, bir komutun çıktısını gelecekte kullanmak üzere bir değişkende saklayabilirsiniz. Buna aynı zamanda kabuk komut ikamesi de denir ve aşağıdaki yollarla gerçekleştirilebilir.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Örneğin, date komutunu today adlı bir değişkende saklayabilir ve geçerli tarihi ortaya çıkarmak için kabuk komut dosyasını çağırabilirsiniz.

#!/bin/bash

today=$(date)

echo “Today is $today”

Başka bir örnek alalım. Linux sisteminizde geçerli oturum açma kullanıcılarını bulmak istediğinizi varsayalım. Bu konuda nasıl davranırsınız? İlk olarak, tüm kullanıcıların listesi (hem sistem, süreç hem de oturum açma kullanıcıları) /etc/passwd dosyasında saklanır.

Dosyayı görüntülemek için cat komutunu kullanmanız gerekir. Ancak, oturum açan kullanıcıları daraltmak için, /bin/bash özelliğine sahip kullanıcıları aramak üzere grep komutunu kullanın ve şu şekilde cut -c 1-10 komutunu kullanın. adların ilk 10 karakterini görüntülemek için gösterilir.

cat komutunu login_users değişkenine kaydettik.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

Bu, basit kabuk komut dosyaları oluşturma konusundaki eğitimimizi sona erdiriyor. Bunu değerli bulduğunuzu umuyoruz.