Bash Script Yazmaya Giriş
Alex Scriven
Data Scientist
Fonksiyonlara argüman geçmek, betiklere argüman geçmeye benzer. $1 gösterimini kullanırsınız.
Ayrıca daha önce gördüğümüz özel ARGV özelliklerine de erişiminiz vardır:
$1, $2 ile erişilir.$@ ve $*, ARGV içindeki tüm argümanları verir$#, argüman sayısını verirGösterim için bazı dosya adlarını argüman olarak bir fonksiyona geçirelim. Üzerlerinde dolaşacağız ve yazdıracağız.
function print_filename { echo "The first file was $1"for file in $@ do echo "This file has name $file" done }print_filename "LOTR.txt" "mod.txt" "A.py"
The first file was LOTR.txt
This file has name LOTR.txt
This file has name mod.txt
This file has name A.py
'Kapsam', bir değişkene erişilebilirliği ifade eder.
Neden önemli? Yalnızca yerel kapsama sahip bir şeye erişmeye çalışırsanız, programınız hata verebilir!
Çoğu programlama dilinin (ör. Python ve R) aksine, Bash’te tüm değişkenler varsayılan olarak globaldir.
function print_filename { first_filename=$1 }print_filename "LOTR.txt" "model.txt" echo $first_filename
LOTR.txt
Dikkat: Global kapsam risklidir; istenmeyen durumlar yaşanabilir.
Değişken kapsamını sınırlamak için local anahtar sözcüğünü kullanabilirsiniz.
function print_filename { local first_filename=$1 }print_filename "LOTR.txt" "model.txt" echo $first_filename
S: Neden hata yerine boş bir satır çıktı?
Yanıt: first_filename, global ilk ARGV öğesine ($1) atandı.
Betiği argümansız çalıştırdım (bash script.sh), bu yüzden bu alan boş oldu. Dikkatli olun!
Argümanları içeri almayı biliyoruz—peki dışarı nasıl alırız?
Bash’te return, yalnızca fonksiyonun başarılı (0) ya da başarısız (1-255) olduğunu belirtir. Değer, global $? değişkeninde tutulur.
Seçeneklerimiz:
echo ile yazdırmak (fonksiyonda son satır) ve kabuk‑içi‑kabuk ile yakalamakBir dönüş hatası görelim:
function function_2 { echlo # 'echo' yazım hatası }function_2 # Fonksiyonu çağır echo $? # Dönüş değerini yazdır
script.sh: line 2: echlo: command not found
127
Ne oldu?
$? içindeki dönüş değeri 127 (hata) olduecho ve kabuk‑içi‑kabuk yakalama ile değeri doğru şekilde geri döndürelim:
function convert_temp { echo $(echo "scale=2; ($1 - 32) * 5 / 9" | bc) }converted=$(convert_temp 30) echo "30F in Celsius is $converted C"
30F in Celsius is -1.11 C
Bash Script Yazmaya Giriş