Kabuk Fonksiyonları
Komut dosyamız şu anda HTML belgesini oluşturmak için aşağıdaki adımları gerçekleştirir:
1. Sayfayı açın.
2. Sayfa başlığını açın.
3. Sayfa başlığını ayarlayın.
4. Sayfa başlığını kapatın.
5. Sayfa gövdesini açın.
6. Çıktı sayfası başlığı.
7. Çıkış zaman damgası.
8. Sayfa gövdesini kapatın.
9. Sayfayı kapatın.
Geliştirmemizin bir sonraki aşaması için 7. ve 8. adımlar arasına bazı görevler ekleyeceğiz. Bunlar şunları içerecektir:
● Sistem çalışma süresi ve yükleme. Bu, son kapatma veya yeniden başlatmadan bu yana geçen süre ve işlemcide birkaç zaman aralığında çalışmakta olan ortalama görev sayısıdır.
● Disk alanı. Sistemin depolama aygıtlarındaki genel alan kullanımı.
● Ev alanı. Her kullanıcı tarafından kullanılan depolama alanı miktarı.
Bu görevlerin her biri için bir komutumuz olsaydı, komut değiştirme yoluyla bunları komut dosyamıza ekleyebilirdik:
#! / Bin / bash
# Sistem bilgi sayfasının çıktısını almak için program
TITLE="$HOSTNAME" İçin Sistem Bilgisi Raporu CURRENT_TIME=$(tarih +"%x %r %Z")
TIMESTAMP="$CURRENT_TIME, $USER tarafından oluşturuldu"
kedi << _EOF_
#! / Bin / bash
# Sistem bilgi sayfasının çıktısını almak için program
TITLE="$HOSTNAME" İçin Sistem Bilgisi Raporu CURRENT_TIME=$(tarih +"%x %r %Z")
TIMESTAMP="$CURRENT_TIME, $USER tarafından oluşturuldu"
kedi << _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(rapor_çalışma süresi)
$(report_disk_space)
$(report_home_space)
_EOF_
$TITLE
$TITLE
$TIMESTAMP
$(rapor_çalışma süresi)
$(report_disk_space)
$(report_home_space)
_EOF_
Bu ek komutları iki şekilde oluşturabiliriz. Üç ayrı komut dosyası yazabilir ve bunları PATH'imizde listelenen bir dizine yerleştirebilir veya komut dosyalarını programımıza şu şekilde yerleştirebiliriz: kabuk fonksiyonları. Daha önce de belirttiğimiz gibi, kabuk işlevleri, diğer betiklerin içinde yer alan ve özerk programlar olarak hareket edebilen “mini betiklerdir”. Kabuk işlevlerinin iki sözdizimsel biçimi vardır. İlk olarak, daha resmi biçim:
işlev isim {
komutlar
dönüş
}
ve daha basit (ve genellikle tercih edilen) form:
isim () {
komutlar
dönüş
}
#! / Bin / bash
#! / Bin / bash
# Kabuk işlevi demosu
function step2 { echo "Adım 2" dönüşü
}
# Ana program burada başlar echo "Adım 1"
# Kabuk işlevi demosu
function step2 { echo "Adım 2" dönüşü
}
# Ana program burada başlar echo "Adım 1"
nerede isim fonksiyonun adıdır ve komutlar fonksiyon içinde yer alan bir dizi komuttur. Her iki form da eşdeğerdir ve birbirinin yerine kullanılabilir. Aşağıda bir kabuk işlevinin kullanımını gösteren bir komut dosyası görüyoruz:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
Kabuk Fonksiyonları
13 adım2
14 yankı "Adım 3"
13 adım2
14 yankı "Adım 3"
Kabuk komut dosyasını okurken, bu satırlar yorumlardan ve işlev tanımından oluştuğu için 1'den 11'e kadar olan satırlardan geçer. Yürütme 12. satırda başlar ve bir kaçırmak emretmek. 13. satır aramalar kabuk işlevi step2 ve kabuk, işlevi başka herhangi bir komutta olduğu gibi yürütür. Program kontrolü daha sonra 6. satıra geçer ve ikinci kaçırmak komut yürütülür. Sonraki satır 7 yürütülür. Onun dönüş komutu, işlevi sonlandırır ve işlev çağrısından sonraki satırda (satır 14) kontrolü programa geri verir ve son kaçırmak komut yürütülür. İşlev çağrılarının kabuk işlevleri olarak tanınması ve harici programların adları olarak yorumlanmaması için, çağrılmadan önce kabuk işlevi tanımlarının komut dosyasında görünmesi gerektiğini unutmayın.
Komut dosyamıza minimal kabuk işlevi tanımları ekleyeceğiz:
#! / Bin / bash
# Sistem bilgi sayfasının çıktısını almak için program
TITLE="$HOSTNAME" İçin Sistem Bilgisi Raporu CURRENT_TIME=$(tarih +"%x %r %Z")
TIMESTAMP="$CURRENT_TIME, $USER tarafından oluşturuldu"
Report_uptime () { dönüş
}
Report_disk_space () { dönüş
}
Report_home_space () { dönüş
}
kedi << _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(rapor_çalışma süresi)
$(report_disk_space)
$(report_home_space)
#! / Bin / bash
# Sistem bilgi sayfasının çıktısını almak için program
TITLE="$HOSTNAME" İçin Sistem Bilgisi Raporu CURRENT_TIME=$(tarih +"%x %r %Z")
TIMESTAMP="$CURRENT_TIME, $USER tarafından oluşturuldu"
Report_uptime () { dönüş
}
Report_disk_space () { dönüş
}
Report_home_space () { dönüş
}
kedi << _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(rapor_çalışma süresi)
$(report_disk_space)
$(report_home_space)
_EOF_
_EOF_
Kabuk işlev adları, değişkenlerle aynı kuralları izler. Bir fonksiyon en az bir komut içermelidir. NS dönüş komut (isteğe bağlı) gereksinimi karşılar.