Programmable Functions for GNU Bash

Linux 

 14 Temmuz 2021 - Türkiye



Follow
Follow
Follow

8 dakikalık okuma

“Gerçek” programlama dilleri gibi, Bash’in biraz sınırlı bir uygulamada olsa da fonksiyonel işlevleri vardır. Bir fonksiyonel işlev, bir alt programdır, bir dizi işlemi uygulayan bir kod bloğu -code block-, belirli bir görevi gerçekleştiren bir black box dur. Tekrar eden kodun olduğu her yerde, bir görev -task-, sadece küçük değişikliklerle işlemi tekrar ediyorsa, bir fonksiyon kullanmayı düşünün.

Bash Functions

function function_name {
command...
}

veya

function_name () {
command...
} 

Bu ikinci form, C programcılarının kalbini neşelendirecek (ve daha taşınabilir).

İsteğe bağlı olarak fonksiyonun açılan parantezi C’de olduğu gibi ikinci satırda görünebilir.

Bir alt program, bir görevi gerçekleştirmek için bir araya getirilmiş ve bir isim verilmiş talimatlardan oluşur. “Kod Bloğu Yığma -Chunking-“, potansiyel olarak çok karmaşık bir görevle tek bir kavram olarak başa çıkmanıza olanak tanır. Bu görevi gerçekleştirmek için bilgisayarın atması gereken birçok adım hakkında endişelenmek yerine, altyordamın adını hatırlamanız yeterlidir. Programınızın görevi yerine getirmesini istediğinizde, alt programı çağırmanız yeterlidir. Alt programlar, karmaşıklıkla başa çıkmak için önemli bir araçtır.

Bir altyordamın bazen “black box” olduğu söylenir, çünkü “içinde” ne olduğunu göremiyorsunuz (veya daha kesin olmak gerekirse, genellikle içini görmek istemezsiniz, çünkü o zaman bununla uğraşmak zorunda kalırsınız). altyordamın gizlemeyi amaçladığı tüm karmaşıklık). Elbette, dünyanın geri kalanıyla hiçbir şekilde etkileşime girmeyen bir kara kutu oldukça işe yaramaz olurdu. Bir kara kutu, dünyanın geri kalanıyla bir tür arayüze ihtiyaç duyar, bu da kutunun içindekiler ve dışındakiler arasında bir miktar etkileşime izin verir. Fiziksel bir kara kutunun dışında, basabileceğiniz düğmeler, ayarlayabileceğiniz kadranlar ve bilgileri ileri geri iletmek için kullanılabilecek yuvalar olabilir. Karmaşıklığı yaratmaya değil saklamaya çalıştığımız için kara kutuların ilk kuralına sahibiz:

Bir kara kutunun arayüzü oldukça basit, iyi tanımlanmış ve anlaşılması kolay olmalıdır.

Şimdi, bir kara kutunun bir içi vardır - görevi gerçekten gerçekleştiren bir alt programdaki kod veya televizyon setinizin içindeki tüm elektronik parçalar. Bir kara kutunun içine onun uygulaması denir. Kara kutuların ikinci kuralı şudur:

Bir kara kutu kullanmak için, uygulaması hakkında hiçbir şey bilmenize gerek yoktur; tüm bilmeniz gereken onun arayüzü.

Elbette bir kara kutuya sahip olmak için, ilk etapta birisinin uygulamayı tasarlamış ve inşa etmiş olması gerekir. Kara kutu fikri, hem uygulayıcının hem de kara kutunun kullanıcısının yararına çalışır. Sonuçta, kara kutu sınırsız sayıda farklı durumda kullanılabilir. Kara kutunun uygulayıcısının bunların hiçbirini bilmesine gerek yok. Uygulayıcının sadece kutunun kendisine atanan görevi yerine getirdiğinden ve dünyanın geri kalanıyla doğru bir şekilde arayüz oluşturduğundan emin olması gerekir. Bu, kara kutuların üçüncü kuralıdır:

Bir kara kutunun uygulayıcısının, kutunun kullanılacağı daha büyük sistemler hakkında hiçbir şey bilmesine gerek yoktur.
for i in *.pdf; do
mkdir ${i%%.*};
done

Bir Bash fonksiyonu, aslında birçok kez çağrılabilen temel komut grubudur. Bir fonksiyonun amacı, bash betiklerinizi -bash script de denir- daha okunaklı hale getirmenize yardımcı olmak ve aynı kodu tekrar tekrar yazmaktan kaçınmaktır. Çoğu programlama diliyle karşılaştırıldığında, Bash fonksiyonları biraz kısıtlıdır.

Bu eğitim, Bash fonksiyonlarının temellerini kapsar ve onları kabuk betiklerinizde -shell scrip’te denir- nasıl kullanacağınızı gösterir.

Bash Functions

Bash Fonksiyonu Tanımlamak

Bir bash fonksiyon ifadesi bildirmek kolaydır. Fonksiyonlar iki farklı biçimde bildirilebilir:

|İlk fonksiyon gösterimi function name ile başlar, ardından parantezler gelir. Bu biçim tercih edilen ve daha çok kullanılan formattır. .

function_name () {
  commands
}

Tek sıralı gösterimde ise:

function_name () { commands; }

|İkinci gösterim, ayrılmış -reserved- sözcük function ile başlar, ardından fonksiyon adı gelir. .

function function_name {
  commands
}

Tek sıralı gösterimde ise:

function function_name { commands; }

Dikkat edilmesi gereken birkaç nokta:

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

#!/bin/bash

hello_world () {
   echo 'merhaba, dünya'
}
hello_world

Kodu satır satır inceleyelim:

  1. satırda fonksiyona isim vererek tanımlıyoruz. Kıvrımlı ayraç {, işlevin gövdesinin başlangıcını belirtir.
  2. satır, işlev gövdesidir. İşlev gövdesi birden çok komut, ifade ve değişken bildirimi içerebilir.
  3. satır, kapanış küme parantezi }, hello_world işlevinin sonunu tanımlar.
  4. satırda fonksiyonu çalıştırıyoruz. İşlevi istediğiniz kadar çalıştırabilirsiniz.

Komut dosyasını çalıştırırsanız, merhaba, dünya yazdıracaktır.

İndirmeler

İndirmeyi başlatmak için aşağıdan bir bağlantı seçin.

Sürüm Çıkış Tarihi İndirme Bağlantısı
5.1 2020-12-06 Bash

Kuruluma Hazırlık


configure --prefix=/usr
make
make install

Alıştırmalar


Bir dizindeki pdf dosyalarının uzantıları hariç isimlerini dosya adına çeviren bash betiği aşağıdadır.

for i in *.pdf; 
do mkdir ${i%%.*}; 
done

Bir dizin yolundaki dosya adlarındaki alt çizgileri düz çizgi ile değiştiren betik:

for f in *; 
do mv -v "$f" $(echo "$f" | tr '_' '-'); 
done

Sıkıştırımış imaj dosyalarını jpg resim formatlı hale çevirmek için;

wget https://archive.org/download/kelimemealliquran/kelimemealliquran_jp2.zip
for i in *.jp2; do 
echo "Processing file: $i" ;
convert "$i" -quality 100 "$i.png" ; done
#!/bin/bash
    haveExtension () # this function returns the position of the first period it encounters (counting backwards), if it fails to find such a character, it prints -1
    {
        for (( i=$((${#1}-1)); i>-1; i--)) # od rozmiaru tekstu do -1 wykonuj
        do
            if [ "${1:$i:1}" = '.' ] # if a dot character is searched for at the given position, then
            then
                echo $i; # view its location
                return; # and the end of the function will be
            fi
        done
        echo -1; # and if not, return -1
    }

    getFileName () # this function returns the file name (without the extension)
    {
        filename=$(basename "$1"); 
        extPos=$(haveExtension "$filename"); 
        echo ${filename:0:$extPos}; 
    }
    

    for i in *.jp2; 
    do
        echo "Processing file: $i" 
        convert "$i" -quality 100 "$(getFileName "$i").png" 
    done
!#/bin/sh
a=3687
for i in *.jpg; do
  new=$(printf "%01d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1

done

source:



Son Değişim: 14 Temmuz 2021

Paylaş:



En Yeni İçerikler