Bash Kabuk Betikleme/Giriş Egzersizleri
Bash betiğinin neler için kullanıldığını görmek için bazı örneklere bakacağız. Eğer şu an bu komutları anlamıyorsanız üzülmeyin.
Merhaba Dünya
[değiştir]Basit bir "merhaba dünya" programıyla başlayalım:
echo 'Merhaba, dünya!'
Bu komutu doğrudan Bash komut istemciye girebiliriz veya bir dosyaya (örneğin hello_world.sh
) kaydedip istemciye bash hello_world.sh
veya ./hello_world.sh
yazarak çalıştırabiliriz. İki durumda da Merhaba, dünya!
yazdırılacaktır:
$ echo 'Hello, world!'
Merhaba, dünya!
Burada Bash komut istemcisini belirtmek için $
işaretini kullandık. $
işaretinin yanındaki satır girdiğimiz komutu, sonraki satır ise komutun sonucunu göstermektedir.
Dosya Kontrolü
[değiştir]Şimdi daha karmaşık bir betiğe bakalım:
if [[ -e readme.txt ]] ; then
echo '"readme.txt" isimli dosya bulundu.'
else
echo '"readme.txt" isimli dosya bulunamadı.'
fi
Bu betik, mevcut dizinde readme.txt
isimli bir dosyanın var olup olmadığını kontrol eder ve if
sorgusunu kontrolün sonucuna göre hangi komutların çalıştırılacağını belirlemek için kullanır. Bu betik de doğrudan komut istemciye girilebilirdi ancak bu durumda pek işe yaramazdı.
Yukarıdaki örneklerin hepsi tamamen "Bash içinde" yazıldı yani herhangi bir haricî program gerektirmedi. (echo
, if … then … else … fi
, ve [[ -e … ]]
komutları Bash'in yerleşik komutlarıdır.) Ancak bir kabuk betikleme dili olmasının yanında Bash'in kullanım alanının büyük kısmı haricî programları çalıştırmaktır. Alttaki betik bu beceriyi göstermektedir:
if [[ -e config.txt ]] ; then
echo '"config.txt" isimli dosya halihazırda var. Varsayılan ile karşılaştırılıyor . . .'
diff -u config-varsayılan.txt config.txt > config-fark.txt
echo 'Fark, "config-diff.txt" isimli dosyaya yazıldı.'
else
echo '"config.txt" isimli dosya bulunamadı. Varsayılan kopyalanıyor . . .'
cp config-varsayılan.txt config.txt
echo '. . . tamamlandı.'
fi
Buradaki diff
ve cp
komutları Bash'de yerleşik olarak bulunmasalar da Bash içeren sistemlerde yüklü gelen yaygın araç programlarıdır. Yukarıdaki betik config-varsayılan.txt
isimli varsayılan konfigürasyon dosyasını farzediyor ve config.txt
isimli başka bir konfigürasyon dosyasının varlığını kontrol ediyor. Eğer config.txt
varsa betik diff
isimli haricî programı kullanarak bir "diff" ("difference" = fark) yani iki dosya arasındaki farkı hesaplıyor, böylece kullanıcı varsayılan olmayan konfigürasyon dosyasında nelerin farklı olduğunu görebiliyor. Eğer config.txt
isimli dosya bulunamıyorsa betik cp
("copy" = kopyalamak) isimli haricî programı kullanarak varsayılan konfigürasyon dosyasını config.txt
ismiyle kopyalıyor.
Gördüğünüz gibi haricî programlar da aynı yerleşik komutlar gibi benzer sözdizimi kullanılarak çalıştırılabiliyor, çünkü iki tip de birer "komut".
Yukarıdaki betik fazla "ayrıntılı". Tipik bir betik, kullanıcılar bu kadar bilgiye ihtiyaç duymayacağı için echo
komutunu çok kullanmaz. Aşağıdaki örnekte Bash tarafından yoksayılan #
işaretini kullanarak betiğe yorum ekleyeceğiz. Bu tarz yorumlar kullanıcıdan ziyade betiği inceleyen kişiler için bilgilendirici olacaktır.
if [[ -e config.txt ]] ; then
# eğer config.txt varsa:
diff -u config-varsayılan.txt config.txt > config-fark.txt # nelerin değiştiğini gör
else
# eğer config.txt yoksa:
cp config-varsayılan.txt config.txt # varsayılanı al
fi
Bu tarz bir yorumlama yalnızca bu örnek için yapıldı, çünkü normalde bu kadar basit bir betik hiçbir yoruma ihtiyaç duymaz.