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.