Argümanlar, dönen değerler ve kapsam

Bash Script Yazmaya Giriş

Alex Scriven

Data Scientist

Bash fonksiyonlarına argüman geçme

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:

  • Her argümana $1, $2 ile erişilir.
  • $@ ve $*, ARGV içindeki tüm argümanları verir
  • $#, argüman sayısını verir
Bash Script Yazmaya Giriş

Argüman geçme örneği

Gö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
Bash Script Yazmaya Giriş

Programlamada kapsam

 

'Kapsam', bir değişkene erişilebilirliği ifade eder.

  • 'Global', FOR döngüleri, IF ifadeleri, fonksiyonlar vb. dahil, programın her yerinden erişilebilir demektir.
  • 'Yerel', yalnızca programın belirli bir bölümünden erişilebilir demektir.

Neden önemli? Yalnızca yerel kapsama sahip bir şeye erişmeye çalışırsanız, programınız hata verebilir!

Bash Script Yazmaya Giriş

Bash fonksiyonlarında kapsam

Ç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.

Bash Script Yazmaya Giriş

Bash fonksiyonlarında kapsamı sınırlama

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!

Bash Script Yazmaya Giriş

Dönen değerler

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:

  1. Global bir değişkene atamak
  2. İstediğimizi echo ile yazdırmak (fonksiyonda son satır) ve kabuk‑içi‑kabuk ile yakalamak
Bash Script Yazmaya Giriş

Bir dönüş hatası

Bir 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?

  1. Fonksiyonu çağırdığımızda hata oluştu
    • Betik 'echlo' adlı bir program aradı ama yoktu
  2. $? içindeki dönüş değeri 127 (hata) oldu
Bash Script Yazmaya Giriş

Doğru biçimde döndürme

echo 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
  • Artık ara bir değişken oluşturmadığımıza dikkat edin.
Bash Script Yazmaya Giriş

Hadi pratik yapalım!

Bash Script Yazmaya Giriş

Preparing Video For Download...