Bash'de Programlama - Kısım 3

Daha güvenli bizim conceptos Bash'te mükemmel çalışan programlama için 2 çok kullanışlı araç öğreneceğiz. Oluşturmayı öğrenin fonksiyonlar ve tanımla boru hatları İlk başta karmaşık görünebilir, ancak daha sonra muazzam bir şey göreceğiz yarar bize sağladıklarını.

Borular

Spesifik olarak ve çok fazla düşünmeden, bir boru hattı, bir işlemin çıktısının diğerinin girdisi olarak yönlendirilmesine olanak tanıyan, kod satırlarının azaltılması, sonuç depolama değişkenlerinin ortadan kaldırılması ve iyileştirme gibi bir dizi avantaja olanak tanıyan bir yöntemdir. Senaryonun verimliliği.

Bir boru genellikle | sembolüne sahip olarak tanınır. ifadelerin birleştirilmesine olanak tanır; Varsayılan olarak kullanılmasına rağmen boru oluşturmanın başka yolları da vardır.

Örnek: En son çekirdek mesajlarını yazdır

#dmesg, sistem önyüklemesi sırasında #en son çekirdek mesajlarını ve yüklü sürücüleri görüntülemenizi sağlar; tail bir dosyanın veya #command'ın son kısımlarını yazdırır

dmesg | kuyruk

Bunları istediğiniz kadar karmaşık hale getirebilseniz de, borunun temel yapısı bir komutun sonucunun bir sonraki komutta girdi olarak kullanılmasına izin verir; bu da ardışık borular eklemeye devam ederseniz yeni bir komuta girdi sağlayabilir.

fonksiyonlar

İşlevler, yeniden yazmaya gerek kalmadan birkaç kez yürütülebilecek şekilde gruplandırılmış bir dizi ifadedir. Bu, bir yemek çeşidini pişirmeyi öğrendiğimizde tarifini bir kağıda yazacağımızı ve o yemeği her pişirmek istediğimizde aynı tarifle yeni bir sayfa yazmak yerine tarifine başvuracağımızı düşünmekle eşdeğerdir.

Belki de işlevlerle ilgili en önemli şey, parametreleri, bunları işlemek ve bir çıktı oluşturmak için kullanacakları verileri aktarma olasılığıdır. Yapısı aşağıdaki gibidir:

işlev işlev adı {

Procesos

}

Örnek: TCP protokolü üzerinde çalışan servisleri gösteren fonksiyon. Daha fazla boru uygulamasına da bakabiliriz.

#Bir fonksiyon ismi tanımlıyoruz, istediğimiz gibi olabilir.

işlev tcp_services {

#cat, tüm hizmetleri ilişkili bağlantı noktalarıyla birlikte #içeren /etc/services klasörünün içeriğini birleştirir ve görüntüler.

#thefirst grep listeyi alır ve yorumları kaldırır, –v ile sonucu tersine çeviririz

#ikinci grep yalnızca TCP ile ilgili olanları gösterir

cat /etc/services | grep –v “^#” | grep tcp

}

Bu fonksiyonu çalıştırmamız gerektiğinde onu ismiyle çağırmamız yeterli:

tcp_services

Bu durumda parametresiz çalışır; Bunlara sahipse, fonksiyonun düzgün çalışması için bunları eklemeliyiz, aksi takdirde fonksiyon düzgün çalışmayacaktır. Return kullanmak, bir fonksiyonun işlemin sonucu olarak bir değer döndürmesine olanak tanır.

Örnek: 2 sayının toplamını hesaplayan giriş parametrelerine sahip fonksiyon.

#! / Bin / bash
fonksiyon toplamı()
{
#with ile işlemi tırnak içinde yürütebiliriz
"sonuç=$1 + $2" olsun

#return tamsayı değerini döndürmenizi sağlar. Dönüş yürütüldüğünde, değer $? değişkeninin içinde saklanacaktır.
$sonucu döndür;
}
 
#toplam fonksiyonu çağrılıyor ve 2 giriş parametresini geçiyoruz.

2 3 ekle

#$'ın değeri basılıyor mu? echo ile değişkenin gerçek değerini tırnak içinde değerlendirerek
echo -e "Sonuç = $?";

<< Önceki bölüme git

Teşekkürler Juan Carlos Ortiz!


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Nill işaretçisi dijo

    Emin değilim, ancak işlevlerin return ifadesi yalnızca "çıkış" hata kodları gibi 0 ile 255 arasında bir tamsayı döndürmeye yarar; her şey yolundaysa genellikle 0 ve diğer durumlar için başka bir sayı. Örnekte bu işe yarasa da, sonucu return ile döndürmenin iyi bir uygulama olduğunu düşünmüyorum.
    Aptalca bir şey söylediğim yer burası! göz! Ha!

  2.   johnk dijo

    Gerçek şu ki beni şüphe içinde bıraktın. Her durumda, işlevlerle ilgili sorunlardan kaçınmak için, işlevin bir değer veya dize döndürmek veya yazdırmak istemesi durumunda return'ü echo ile değiştirebiliriz.

  3.   Abel S. Monte Grande dijo

    Doğrudur, bunu çözmek için bc komutunu kullanabilirsiniz, toplam işlevinde kullanabilirsiniz: result=`echo $1+$2 | bc -ql'

  4.   Luis Miguel dijo

    iyi,

    Bash dosyalarını sistem genelinde çalışacak şekilde nereye kaydedebileceğimi ve bunun bin dizini değil, yedek kopyaların oluşturulacağı giriş dizini olacağını bilmek istiyorum.

    Teşekkürler ve saygılar.

  5.   Joaquin dijo

    Çok teşekkür ederim, senaryolarla başlıyorum ve gerçek şu ki bu çok faydalı, bilginizi paylaşırken çok naziksiniz!
    selamlar

    1.    hadi linux kullanalım dijo

      Teşekkür ederim! Sarıl!
      Paul

  6.   Cristhian dijo

    Sözdizimi hatası: «(» beklenmedik
    Örneği çalıştırmaya çalışırken hata alıyorum, aynen kopyaladım

    Ne olabilir? Ubuntu 14.10'dayım