[*] Bu yazıyı, Kali'yi Tanıyalım isimli blogu okumuş ve komutlara hakim olduğunuzu varsayarak yazıyorum.
Bu konu literatürde 'File Test Operators' olarak geçer. Başka programlama dillerinde dosyalara yazılım yoluyla erişebilmek için bin türlü işlem yapmamız gerekir fakat Bash öyle değildir. Bash öğrenirken üç kavramımız var: 'Shell', 'Script' ve 'Shell Script'. Bu kavramlardan Shell, komutlarımızı girdiğimiz alandır. Script ise komutlar topluluğunu oluşturan bir kod dosyasıydı. Shell Script ise, Script içerisinde yer alan kodları Shell üzerinde kolayca gerçekleştirebileceğimiz bütünlüktür. Ne demek istiyorum?

Yukarıda gördükleriniz bahsettiğimiz komutlardır ve gördüğünüz gibi bunları teker teker yazıyoruz. İsterseniz yine bu yolla 'Documents' klasörüne 'deneme.txt' adında bir metin belgesi oluşturalım.

Yukarıdaki gibi, yapmak istediğimizi yaptık. Peki, madem Bash bir Shell Script; o zaman bütün bu komutları tek bir dosyaya yazsak ve bütün bu işlemleri istediğimiz zaman sadece dosyayı çalıştırarak gerçekleştirsek nasıl olur?

İlk önce biraz evvel oluşturduğumuz dosyayı silelim. Daha sonra işlemlere başlayalım.
Terminal ekranında çok başka bir klasör içindeyken sadece 'cd' komutunu verirseniz konumunuz en başa döner yani ana klasöre inersiniz. Hemen bakalım.

Yukarıdaki görselde yeşil kutu ile gösterdiğim yerde gördüğünüz gibi '/opt/microsoft/powershell' klasöründeyim. Hemen altındaki kırmızı kutuya baktığınızda ana klasöre inmek için yaptığım tek şey 'cd' yazmak oldu.
Bu yüzden yazacağımız Script içerisinde yapmamız gereken ilk şey, aşağıda gördüğünüz gibi 'cd' yazmaktır. Bunun sebebi; kullanıcı hangi klasörde olursa olsun ana klasöre insin ve Documents'e girebilsin.

Bu satır çalıştırıldığında kullanıcı artık ana klasördedir. Daha sonra bizim, Documents klasörüne girmemiz gerekiyor. Bunun için 'cd Documents' komutunu vermemiz gerekir.

Sonra, deneme.txt isimli bir dosya oluşturacağımızı söylemiştik; onu yapalım.

İsterseniz bir de dosya oluşturulduktan sonra Documents klasörünün içerisini görebilmek adına 'ls' çalıştıralım.

Evet, işimiz bitti. Şimdi yapmamız gereken tek şey, bu Script'i çalıştırmak.

Gördüğünüz ve bildiğiniz gibi ./practices.sh komutunu vererek Script dosyamızı çalıştırdık. Aşağıda, 'deneme.txt' şeklinde bir çıktı görüyoruz. Bu, en sondaki 'ls' komutundan kaynaklanıyor. Yani aslında Documents içerisinde ne varsa bize onları gösterdi. İsterseniz kendimiz o klasörün içerisine girip bakabiliriz.

Gördüğünüz gibi Documents içerisinde deneme.txt isimli bir dosyamız oluştu. Dosyayı açtık ve bildiğiniz, normal bir metin editörü geldiğini gördük. Yani problem yok. İşte, Bash'in gücü.
Peki; sizce biz, hiçbir şey yapmadan Documents içerisinde deneme.txt isimli bir dosyanın olup olmadığını kontrol edebilir miyiz? Elbette, edebiliriz.
Bunun için ilk önce kullanıcıdan aradığı dosyanın ismini istememiz lazım. Bu yüzden aşağıdaki gibi ilk önce echo ile bunu soruyoruz, daha sonra read ile bunu istiyoruz.

Bunu yaptıktan sonra biraz önceki gibi önce 'cd' sonra 'cd Documents' çalıştırmamız lazım. Çünkü biz, o dosyayı Documents içerisinde arıyoruz.

Bunu da sağladıktan sonra ne yapmamız lazım? Bir if koşulu açmamız ve "eğer dosya mevcutsa bunu bana bildir" dememiz gerekir. Bunun için aklınıza gelen ilk şey aşağıdaki kod satırı olabilir.
if [ $fileName ]
Elbette, bu zamana kadar gördükleriniz ile bunu bu şekilde yazarsınız ancak şimdi yeni bir şey öğreneceğiz. Ben, yukarıdaki kodu if [ -e $fileName ] olarak düzenliyorum. Buradaki '-e' parametresinin anlamı; İngilizce'deki 'exists' kelimesinden gelir ve anlamı 'mevcut' şeklindedir. Bizim burada dediğimiz şey; "eğer fileName mevcutsa..." şeklindedir. Yapalım.

'then' komutunu da unutmuyoruz. Peki, mevcutsa ne olsun? Bize bilgi versin, öyle değil mi? Bununla beraber eğer mevcut değilse yine bize bilgi versin. Bunu yapabilmek için 'echo' kullanabiliriz.

Evet, kodumuz hazır. İsterseniz kodumuzu çalıştıralım ve ne olacağına bakalım.
NOT: Documents içerisinde deneme.txt isimli bir dosya var; az önce oluşturduğumuz dosyayı tekrar silmedim.

Bizden, aradığımız dosyanın ismini istiyor. Hemen 'deneme.txt' şeklinde bir girdi verelim ve sonuca bakalım.

Gördüğünüz gibi kodumuz sorunsuz bir şekilde çalıştı ve dosyanın orada olduğunu söyledi. İsterseniz dosyayı silelim ve tekrar deneyelim.

Şimdi çalıştıralım.

Evet, sorun yok. Peki, bu kodu nasıl geliştirebiliriz? Mesela dosyanın sorgulanacağı konumu da kullanıcıdan alsak daha efektif bir kod olabilir. Bunu, siz olsanız nasıl sağlardınız?
Bence bunu, yine 'cd' ile en başa döndükten sonra kullanıcıdan aldığımız yola gidip orada sorgu yaparak sağlayabiliriz. Hemen bakalım.

Dosya ismini istediğimiz gibi yolu da istedik; 'read path'. Daha sonra yine ana klasöre 'cd' ile indik ve son olarak 'cd $path' komutu ile kullanıcının bize verdiği yola girdik. Sonrası aynı. Çalıştırıp ne olacağını gözlemleyelim.

Terminale bakalım. Şimdi bize, dosya ismini soruyor; 'deneme.txt' şeklinde bir girdi verelim.

Şimdi de bize lokasyonu soruyor. Yine Documents yazalım ve orayı kontrol edelim.

Gördüğünüz gibi biraz 'mevcut değil' dedi; zaten biraz önce onu silmiştik. İsterseniz Desktop'a 'test' isimli bir dosya oluşturalım ve onu sorgulayalım.

Gördüğünüz gibi 'test' adında bir dosya oluşturduk. Şimdi sorgulamamıza geçelim.

Evet, mevcut. Ancak ufak bir pürüz var; dikkat ederseniz 'Documents içerisinde...' şeklinde çıktı alıyoruz. Bunu dalgınlığıma geldiği için atlamışım ancak iyi oldu; size de göstermiş olurum. Bunun sebebi, biraz önce sadece oraya özel arama yaptığımız için echo ile sadece Documents çıktısını vermemizden kaynaklanıyor. Yani aşağıdaki kodu düzenlememiz lazım.

Bunu, kullanıcı hangi lokasyonu girdiyse onu alacak şekilde düzenlememiz lazım. Bunu da aşağıdaki gibi yapabiliriz.

Evet, işlemimiz tamamlandı. Bu kodu dilediğiniz gibi düzenleyebilirsiniz. Örneğin eğer dosya mevcut değilse yenisini yaratabilir, dosya mevcutsa içerisine bir şeyler yazdırabilirsiniz. Hatta birlikte yapalım.

Yukarıdaki düzenlemeyle beraber Bash'e, "Dosya mevcutsa içerisine 'Cyber Worm' yazdır ama dosya mevcut değilse dosyayı oluştur ve içerisine 'Cyber Worm' yazdır" demiş olduk. Test edelim.

Desktop içerisinde 'test' dosyası gerçekten de mevcut. Dosyayı açtığımızda Bash'in dediğimizi yaptığını görüyoruz; problem yok. Şimdi, Documents içerisine bakalım.

Bakın, 'mevcut değil' dedi, dosyayı oluşturdu ve içerisine Cyber Worm yazdırdı. Script oldukça güzel çalışıyor, lütfen siz de deneyin. Elbette, oluşturulma veya içerisine yazı yazılma durumlarını da ekrana yazdıran komutları girebilirsiniz. Burada her şey sizin hayal gücünüze kalmış.
Burada bir başka husus daha vardır. Biraz önce '-e' şeklinde verdiğimiz parametre yerine '-d' parametresini verseydik Bash, klasörleri dikkate alırdı. '-d' parametresi, İngilizce'deki 'Directory' kelimesinden gelir ve anlamı 'klasör'dür. Bununla beraber blogun en başında bu konunun literatürdeki ismini verdim. Daha detaya inmek isterseniz bu isimle aratma yapabilirsiniz.
Yayınlanma Tarihi: 2022-09-11 15:53:28
Son Düzenleme Tarihi: 2022-09-13 13:12:05