Android

Bash fonksiyonları

Automate Recon with Your Own Bash Script [Tutorial]

Automate Recon with Your Own Bash Script [Tutorial]

İçindekiler:

Anonim

Bir Bash işlevi temelde sayısız kez çağrılabilen bir dizi komuttur. Bir işlevin amacı, bash komut dosyalarınızı daha okunabilir hale getirmenize yardımcı olmak ve aynı kodu tekrar tekrar yazmamaktır.

Çoğu programlama dili ile karşılaştırıldığında, Bash fonksiyonları biraz sınırlıdır. Bu eğitimde, Bash işlevlerinin temellerini ele alacağız ve bunları kabuk komut dosyalarınızda nasıl kullanacağınızı göstereceğiz.

Bash İşlev Beyanı

Bir bash işlevini bildirme sözdizimi çok basittir. İki farklı biçimde beyan edilebilirler:

  1. İlk biçim işlev adıyla başlar, ardından parantezler gelir. Bu tercih edilen ve daha çok kullanılan biçimdir.

    function_name () { commands }

    Tek satırlı sürüm:

    function_name () { commands; }

    İkinci biçim, ayrılmış function sözcüğü ve ardından işlev adı ile başlar.

    function function_name { commands }

    Tek satırlı sürüm:

    function function_name { commands; }

Dikkat edilmesi gereken birkaç nokta:

  • Kıvrık ayraçlar {} arasındaki komut listesi işlevin gövdesidir. İşlev gövdesini çevreleyen kıvrımlı parantezler, boşluk veya yeni satırlarla vücuttan ayrılmalıdır. Bir bash işlevini çağırmak için işlev adını kullanmanız yeterlidir. Kıvrık ayraçlar arasındaki komutlar, işlev kabuk komut dosyasında her çağrıldığında yürütülür. İşlev tanımı, işleve herhangi bir çağrı yapılmadan önce yerleştirilmelidir. Tek satırlı "sıkıştırılmış" işlevler kullanılırken, noktalı virgül ; Her zaman işlev adlarınızı açıklayıcı tutmaya çalışmalısınız.

Bunu daha iyi anlamak için aşağıdaki örneğe göz atın:

~ / Hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Kodu satır satır analiz edelim:

  • 3. satırda, fonksiyona bir isim vererek ve fonksiyonun gövdesinin başlangıcını işaretleyen süslü ayracı açarak tanımlarız. Satır 4 fonksiyon gövdesidir. İşlev gövdesi birden çok komut ve değişken bildirimi içerebilir. Kapanış küme ayracı } olan satır 7 , hello_world işlevinin sonunu tanımlar. 7 satırda işlevi yürütüyoruz. Fonksiyonu istediğiniz kadar çalıştırabilirsiniz.

Senaryoyu çalıştırırsanız, hello, world yazdırır.

Değişkenler Kapsamı

Genel değişkenler, kapsamdan bağımsız olarak komut dosyasının herhangi bir yerinden erişilebilen değişkenlerdir. Bash'te, fonksiyonun içinde bildirilse bile varsayılan olarak tüm değişkenler global olarak tanımlanır.

Yerel değişkenler, işlev gövdesi içinde local anahtar sözcükle bildirilebilir ve yalnızca bu işlevin içinde kullanılabilir. Farklı işlevlerde aynı ada sahip yerel değişkenlere sahip olabilirsiniz.

Bash'de değişken kapsamının nasıl çalıştığını daha iyi göstermek için bir örnek ele alalım:

~ / Variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

Komut dosyası var1 ve var2 iki genel değişken tanımlayarak başlar. Ardından, yerel değişken var2 ve genel değişken var2 değiştiren bir var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

Yukarıdaki çıktıdan şunu söyleyebiliriz:

  • İşlev gövdesi içinde, varolan bir genel değişkenle aynı ada sahip bir yerel değişken ayarlarsanız, değişken genel değişkene göre önceliklidir. Küresel değişkenler işlev içinden değiştirilebilir.

Dönüş Değerleri

“Gerçek” programlama dillerindeki işlevlerin aksine, Bash işlevleri çağrıldığında bir değer döndürmenize izin vermez. Bir bash işlevi tamamlandığında, dönüş değeri işlevde yürütülen son ifadenin, başarı için 0 ve hata için 1-255 aralığında sıfır olmayan ondalık sayı durumudur.

Dönüş durumu, return anahtar sözcüğü kullanılarak belirtilebilir ve $? Değişkenine atanır.. return ifadesi işlevi sonlandırır. Bunu işlevin çıkış durumu olarak düşünebilirsiniz.

~ / Return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Bir işlevden gerçekte rastgele bir değer döndürmek için başka yöntemler kullanmamız gerekir. En basit seçenek, işlevin sonucunu genel bir değişkene atamaktır:

~ / Return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Bir işlevden değer döndürmek için başka bir daha iyi seçenek, değeri aşağıda gösterildiği gibi echo veya printf kullanarak stdout göndermektir:

~ / Return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

İletiyi stdout'a yazdıracak işlevi yürütmek yerine, $() komut yerine kullanarak işlev çıktısını func_result değişkenine func_result . Değişken daha sonra gerektiği gibi kullanılabilir.

Bağımsız Değişkenleri Bash İşlevlerine Aktarma

Bash işlevine herhangi bir sayıda argüman iletmek için, bunları işlevin adından hemen sonra, bir boşlukla ayırarak koyun. İçindeki boşlukları olan bir argümanın yanlış ayrılmasını önlemek için argümanları iki kez alıntılamak iyi bir uygulamadır.

  • Geçirilen parametreler, işlevin adından sonraki parametrenin konumuna karşılık gelen $1 , $2 , $3 $n şeklindedir. $0 değişkeni işlevin adı için ayrılmıştır. $# Değişkeni, işleve iletilen konumsal parametrelerin / bağımsız değişkenlerin sayısını tutar $* ve $@ değişkenleri, işleve iletilen tüm konumsal parametreleri / bağımsız değişkenleri tutar.
    • Çift tırnak içine alındığında, "$*" boşlukla ayrılmış tek bir dizeye genişler (IFS'in ilk karakteri) - "$1 $2 $n" . Çift tırnak içine alındığında, "$@" ayrı dizelere genişler - "$1" "$2" "$n" .Çifte alıntı yapılmadığında, $* ve $@ aynıdır.

İşte bir örnek:

~ / Passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Sonuç

Bash işlevi, belirli bir işlemi gerçekleştirmek için tasarlanmış yeniden kullanılabilir kod bloğudur. Bir kez tanımlandığında, fonksiyon bir kod içinde birden çok kez çağrılabilir.

Daha uzun bir komut için unutulmaz bir kısayol komutu oluşturmak için Bash işlevinin nasıl kullanılacağını da okumak isteyebilirsiniz.

bash terminali