Unix / Linux - Kabuk İşlevleri

Bu bölümde, kabuk işlevleri hakkında ayrıntılı olarak tartışacağız. İşlevler, bir komut dosyasının genel işlevselliğini daha küçük, mantıksal alt bölümlere ayırmanıza olanak tanır ve bu alt bölümler gerektiğinde kendi görevlerini yerine getirmek için çağrılabilir.

Tekrarlayan görevleri gerçekleştirmek için işlevleri kullanmak, oluşturmanın mükemmel bir yoludur. code reuse. Bu, modern nesne yönelimli programlama ilkelerinin önemli bir parçasıdır.

Kabuk işlevleri, diğer programlama dillerindeki alt yordamlara, prosedürlere ve işlevlere benzer.

Fonksiyon Oluşturma

Bir işlevi bildirmek için aşağıdaki sözdizimini kullanmanız yeterlidir -

function_name () { 
   list of commands
}

Fonksiyonunuzun adı function_nameve bu, komut dosyalarınızın herhangi bir yerinden adlandırmak için kullanacağınız şeydir. İşlev adının ardından parantez ve ardından parantez içine alınmış komutların bir listesi gelmelidir.

Misal

Aşağıdaki örnek, fonksiyonun kullanımını göstermektedir -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

Yürütme üzerine, aşağıdaki çıktıyı alacaksınız -

$./test.sh
Hello World

Parametreleri İşleve Geçirme

Fonksiyonu çağırırken parametreleri kabul edecek bir fonksiyon tanımlayabilirsiniz. Bu parametreler şu şekilde temsil edilecektir:$1, $2 ve bunun gibi.

Aşağıda, iki parametre Zara ve Ali'yi aktardığımız ve daha sonra bu parametreleri yakalayıp işlevde yazdırdığımız bir örnek verilmiştir .

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

Yürütme üzerine, aşağıdaki sonucu alacaksınız -

$./test.sh
Hello World Zara Ali

İşlevlerden Değerleri Döndürme

Eğer bir exit bir işlevin içinden komut, etkisi yalnızca işlevin yürütülmesini değil aynı zamanda işlevi çağıran kabuk programının da sonlandırılmasıdır.

Bunun yerine sadece işlevin yürütülmesini sonlandırmak istiyorsanız, o zaman tanımlanmış bir işlevden çıkmanın bir yolu vardır.

Duruma bağlı olarak işlevinizden herhangi bir değeri döndürebilirsiniz. return sözdizimi aşağıdaki gibi olan komut -

return code

Buraya code burada seçtiğiniz herhangi bir şey olabilir, ancak tabii ki senaryonuzun bir bütün olarak bağlamında anlamlı veya yararlı olan bir şey seçmelisiniz.

Misal

Aşağıdaki işlev 10 değerini döndürür -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}

# Invoke your function
Hello Zara Ali

# Capture value returnd by last command
ret=$?

echo "Return value is $ret"

Yürütme üzerine, aşağıdaki sonucu alacaksınız -

$./test.sh
Hello World Zara Ali
Return value is 10

İç İçe İşlevler

İşlevlerin daha ilginç özelliklerinden biri, kendilerini ve başka işlevleri de çağırabilmeleridir. Kendini çağıran bir işlev,recursive function.

Aşağıdaki örnek, iki işlevin yuvalanmasını gösterir -

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

Yürütme üzerine, aşağıdaki sonucu alacaksınız -

This is the first function speaking...
This is now the second function speaking...

İstemden İşlev Çağrısı

Yaygın olarak kullanılan işlevler için tanımlar koyabilirsiniz. .profile. Bu tanımlar, her oturum açtığınızda kullanılabilir olacak ve bunları komut isteminde kullanabilirsiniz.

Alternatif olarak, tanımları bir dosyada gruplayabilirsiniz. test.shve sonra - yazarak mevcut kabuktaki dosyayı yürütün.

$. test.sh

Bu, içinde tanımlanan işlevlere neden olma etkisine sahiptir. test.sh mevcut kabuğa aşağıdaki gibi okunacak ve tanımlanacaktır -

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Bir işlevin tanımını kabuktan kaldırmak için unset komutunu kullanarak .fseçeneği. Bu komut aynı zamanda kabuğa bir değişkenin tanımını kaldırmak için kullanılır.

$ unset -f function_name