GNU / Linux'ta bir Kabuk Komut Dosyası oluşturmak için en iyi uygulamalar

Genellikle üzerinde çalışmaya başladığınızda GNU / Linux ve / veya Unix İşletim Sistemleri ile Sunucuların yönetim alanıgenellikle bir ortamda çalışan (yüzler) bulunur. diğer yöneticilerin yazdığı planlanmış görevler ve bir noktada yapmamız gereken yönet (yönet) paragraf Kurumun yeni bir gerekliliğine uymak için herhangi bir sorunu çözmek, iyileştirmek ve / veya ortadan kaldırmak o nerede çalışıyor. Öyleyse merak etmeyin, bu yeni Sistem Yöneticisi Herhangi bir işyerinde, bazılarını anlamak gibi zahmetli bir görevle karşı karşıya kalırsınız. Kabuk betiği başkaları tarafından yaratıldı eski SysAdminiyi yazılmamış veya mantıksal veya yazılı bir yapıda olan, anlaşılması kolay olmayan veya en kötü durumda, komut komutları olan, atipik, eski, verimsiz veya garip ve kafa karıştırıcı bir şekilde yazılmış.

Kabuk Betiği

iken kötü yazılmış komut dosyalarını çözme her zaman anlık bir sıkıntıdır, bu herkese öğretir iyi SysAdmin önemli birşey. Biri yaratacaksa Kabuk betiği bugünün ötesinde kullanmak her zaman daha iyidir bunları çok profesyonel ve standart bir şekilde yazın, böylece zamanla herhangi biri veya kendisi Minimum çaba ve bilgi, minimum sürede anlayış ve idareye ulaşır.

Bu nedenle, konuyla ilgili pratik yayın dizisinden sonra "Kabuk Komut Dosyası Oluşturmayı Öğrenin" Basit ve basit komutlarla çok pratik bazı betikleri incelediğimiz bu yeni diziyle başlayacağız. "GNU / Linux'ta bir Kabuk Komut Dosyası oluşturmak için en iyi uygulamalar", Her küçük yönüne ve birçok şeyin nedenine iyice odaklanacağımız, yani daha iyi senaryolar oluşturmamızı sağlayacak bazı ipuçlarını ele alacağız, ancak kendimiz için değil, bir sonraki kişi için (SysAdmin) onları yönetmek zorunda. Böylece neyi, nasıl ve neden kodladığımı ve artık neden çalışmadığını anlamak gibi sıkıcı ve zor bir görevden geçmek zorunda değilsiniz.

Bu da ilk (1.) gönderi bu yeni dizinin "GNU / Linux için iyi bir Kabuk Komut Dosyası için en iyi uygulamalar" Neyin gittiği veya neyin girmesi gerektiği hakkında konuşacağız. Kabuk Komut Dosyası başlığı.

=======================================
BAŞLIK - KABUK YAKARISI
=======================================

#! / yol / yorumlama [parametre-bağımsız değişken]

En üst satır, GNU / Linux için bir Kabuk Betiğinin çağrıldığı temel yapıdır. Öğeleri şu şekilde tanımlanabilir:

#! => sha-bang

Sha-bang (#!) Oluşturulan veya oluşturulacak Komut Dosyasının en üstünde bir İşletim Sistemimize dosyamızın, kendisinden sonra belirtilen komut yorumlayıcısı tarafından beslenecek (yorumlanacak) bir komutlar kümesi olduğunu söyleyen komut dosyası. Karakter çifti #! aslında bu bir sihirli sayı iki baytlık, özel bir işaretçi bir dosya türü belirleve bizim durumumuzda çalıştırılabilir bir kabuk betiği. Sha-bang'tan hemen sonra adı gelir yürütülecek tercümanın bulunduğu yol artı söz konusu tercümanın adı. Başka bir deyişle, bu bir yorumlayıcı, bir programlama dili veya bir yardımcı program olsun, koddaki komutları yorumlayan programa giden yoldur. Bu kabuk daha sonra komut dosyasındaki komutları üstten başlayarak (sha-bang'den sonraki satır) ve herhangi bir yorumu yok sayarak yürütür. Biraz sha bang Olabilirler:

#! / Bin / sh
#! / Bin / bash
#! / Usr / bin / perl
#! / usr / bin / tcl
#! / bin / sed -f
#! / usr / awk -f

Yukarıda açıklanan satırların her biri (örnek olarak) farklı bir kabuğu çağırır. Çizgi / Bin / sh, çağırın kabuk varsayılan olarak (Bir GNU / Linux İşletim Sisteminde Bash) veya benzeri. Kullanma #! / Bin / shvarsayılan değeri Bourne Kabuğu UNIX tabanlı İşletim Sistemlerinin çoğu ticari varyantında, Komut Dosyasının düzgün Linux olmayan diğer İşletim Sistemlerine taşınabilir, ancak benzer veya ona dayalı veya UNIX, ancak bu, BASH'in belirli özelliklerini feda eder. Ancak dizi "#! / Bin / sh" normlara uygundur POSIX sh standardı.

Tenga en cuenta que sha-bang'ta verilen yol doğru olmalı, aksi takdirde bir hata mesajı, genellikle "Komut bulunamadı", komut dosyasının çalıştırılmasının tek sonucu olacaktır. Karakter çiftini hatırla »#! « Komut dosyası yalnızca bir dizi genel İşletim Sistemi komutundan oluşuyorsa, yani dahili Kabuk yönergeleri kullanılmadan atlanabilir. Ve bir kez daha aklınızda bulundurun ki »#! / Bin / sh« varsayılan olarak varsayılan kabuk yorumlayıcısını çağırır. »#! / Bin / bash« onunla bir takımda GNU / Linux İşletim Sistemi.

Argümanlarla ilgili olarak, kullanılabilecek birkaç tane var, ancak en yaygın olanı: »-E«. senaryoyu yapan herhangi bir komutun yürütme hatalarını doğrulayıno (yürütme satırı) ve pozitifse, durmaya ve çıkmaya zorlartipik olanı »-F« paragraf hangi komut dosyasının yükleneceğini belirtin ve en nadir olanlardan biri »-Rm« yürütme bittikten sonra silinmesini gerçekleştirir. Yalnızca şunu belirtmek mümkündür: sha bang a kadar tek bağımsız değişken (parametre) Çalıştırılacak programın adından sonra.

Ve son olarak, senaryoyu söyle kodunuzun temel bölümlerinde kullanacağınız genel değişkenler, diğerleri arasında yürütme yolu, yetkili kullanıcı, komut dosyası adı gibi olayların doğrulanması için. Ve ile biter diğerlerinin yanı sıra programın, oluşturucunun, kuruluşun verileri, artı program için geçerli olan lisans.

Tavsiyem (En iyi uygulamalar) seçmek için en iyi sha-bang ve başlık a Kabuk betiği ses:

#! / usr / bin / env bash

Neden komutu kullanıyorsunuz »Env« İşletim Sistemine, yorumlayıcının varsayılan olarak tam olarak belirtilen yol ile kullanılacağını belirtiriz, bu da bize bir sha bang bu, taşınabilirliğini artırır, çünkü hiçbir şekilde İşletim Sistemi GNU / Linux tercümanlar veya programlar aynı yola sahiptir. Ve argümanlar olmadan, çünkü bunun için komutu kullanmak daha iyidir setçünkü onunla yapabiliriz hataları doğrulayın, genel (-e) veya özel (+ x / -x)O, para ortam (-i) veya belirli (-u / –unset) değişkenler için genel ön ayarları temizle. Ve son olarak belirli (- o) tamamlayıcı eylemleri yürütmek senaryo içinde.

Bu yüzden tavsiye ettiğim HEADER şöyle olacaktır:

#! / usr / bin / env bash
# Bash yorumlayıcısını İşletim Sistemine göre mutlak yolla belirtin.

set -o hata
# Komut dosyasına, bir komut veya yürütme satırı başarısız olduğunda durmasını ve kapanmasını söylemek için.

set -o isim
# Komut dosyası bildirilmemiş değişkenleri kullanmaya çalıştığında betiğe durmasını ve kapanmasını söylemek için.

set -o boru hatası
# Sıfırdan farklı bir çıkış kodu döndüren son siparişin çıkış durumunu almak için.

# set -o xtrace
# Neyin çalıştığını izlemek için. Hata ayıklama için kullanışlıdır. Yalnızca hataları kontrol etmek için etkinleştirin.

Ek olarak şu önerileri takip etmeyi unutmayın:

01. - Kodunuzu girin: Kodunuzu okunaklı hale getirmek çok önemlidir ve çoğu insanın da unuttuğu bir şeydir. Görünürde iyi bir mantıksal yapı algılamak için gerekli girintileri yapmaya çalışın.

02.- Kod bölümleri arasına ayırma boşlukları ekleyin: Modüller veya bölümler arasında boşluk bırakılması, kodun okunabilir ve anlaşılması kolay olmasına yardımcı olduğundan, bu kodun çok daha anlaşılır olmasına yardımcı olabilir.

03.- Kod hakkında mümkün olduğunca çok yorum yapın: Her bir Komut Emrinin (Yürütme Satırı) veya Kod Bölümünün üstüne (veya altına), kodun kendi içinde ne olduğunu açıklamak için komut dizisinin (dizilerinin) işlevinin bir tanımını eklemek idealdir.

04.- İşlevlerinin açıklayıcı adlarıyla değişkenler oluşturun: Oluşturulacağı işlevi açıkça tanımlayan açıklayıcı değişken adları atayın. Tek bir kod bloğunun dışında asla kullanılmayacak geçici değişkenler oluştursanız bile, hangi değerleri veya işlevleri işlediğini örtük olarak (nesnel olarak) açıklayan bir ad koymak yine de iyidir.

05. - Komut değiştirme için VARIABLE = $ (komut) sözdizimini kullanın: Değeri başka bir komuttan türetilen bir değişken oluşturmak istiyorsanız, bunu bash'da yapmanın iki yolu vardır. İle ters tikyani karakterlerle '' , EJM: DEĞİŞKEN = `komut-seçenek parametreleri`, ancak zaten kullanımdan kaldırılmıştır, dolayısıyla sözdizimi DEĞİŞKEN = $ (komut) en modern, kabul gören ve önerilen yoldur. HAYIR -> TARİH = `tarih +% F` / EVET -> TARİH = $ (tarih +% F)

06.- Süper Kullanıcı ve Yetkili Kullanıcı modüllerini ve / veya Doğrulama değişkenlerini şifreli veya şifresiz kullanın: Gerekirse güvenlik seviyelerini artırmak.

07.- İşletim Sisteminin Doğrulanması (Distro, Sürüm, Mimari) modüllerini ve / veya değişkenlerini kullanın: uygun olmayan platformlarda kullanımı önlemek için.

08.- Kritik veya toplu eylemlerin (modüller / işlevler) yürütülmesini onaylamak için modülleri (prosedürler / bölümler) kullanın: Doğaçlama veya dikkatsizlikten kaynaklanan hataları en aza indirmek.

09.- Kullanıcı Dostu Arayüzler Sağlayın (Kullanıcı Dostu): Menüler ve renkler ile Terminal ile Diyalog ve Zenity, Gxmessage ile Temel Kullanıcılar için Grafik Arayüzler. Ve mümkünse, sese göre tanınabilir olayları tanımlayan sonik uyarıların desteğini kullanın. Senaryonuzun yapabileceği kadar çok denedim sadece seçenekleri / modülleri / işlevleri etkinleştirip devre dışı bırakarak her iki şekilde çalışın.

10.- Hoş Geldiniz ve Elveda modüllerini (mesajlar) ekleyin: kullanıcıyla etkileşimi artırmak için gerekirse.

11.- Bir çift yürütme doğrulama modülü ekleyin: Aynı anda 1 defadan fazla yürütülmesini önlemek için bir kilit dosyası oluşturun.

12.- Komut dosyasının boyutunu harici işlevler ve / veya modüllerle rasyonelleştirin: Komut Dosyası çok büyükse, işlevleri kullanarak kodu bölün veya bunları bir ana komut dosyası aracılığıyla çağrılan küçük komut dosyalarına bölün.

13.- Senaryo içindeki diğer Tercümanlara (programlama dilleri) çağrıların açık ve açık bir şekilde çağrılması: Bunları satırlar veya modüller aracılığıyla açıkça çağırır.

Örnek:

# ================================================== #
#!/bin/bash
#Llamando a un interprete externo a BASH
echo 'El siguiente texto será mostrado por el interprete de PERL'
perl -e 'print "Este texto es mostrado por un script PERL embebido.\n";'
exit 0
# ==================================================#
# ==================================================# 
#!/bin/bash #Llamando al interprete de Python. 
echo 'El siguiente es un script de python:'
echo print "Hola, mundo!" | tee $HOME/.testpythonbash.py
python $HOME/.testpythonbash.py exit 0
# ==================================================#

# ======================================================= #
#!/bin/bash
# bash-y-perl.sh

echo "Saludos desde la parte BASH del script."
# Es posible añadir mas comandos BASH aqui.

exit 0
# Fin de la parte BASH del script.

###########################################################

#!/usr/bin/perl
# Esta parte del script se invoca con la opcion -x.

print "Saludos desde la parte PERL del script.\n";
# Podemos añadir mas comandos PERL aqui.

# Fin de la parte PERL del script.
# ======================================================= #
 

Gelecekteki yayınlarda, yukarıda açıklanan uygulamaların her birini daha ayrıntılı olarak genişleteceğiz.

Ve kendinize ait veya başkalarına ait başka iyi uygulamaları biliyorsanız, daha eksiksiz bir özet oluşturmak için bunlar hakkında yorum yapmaktan çekinmeyin!

Bu yeni dizinin bir sonraki yayınına kadar.


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.   Max j ​​rodriguez dijo

    Sadece bir ayrıntı, "shebang" 😛
    çok iyi bir gönderi, uzun vadede iyi uygulamalar her zaman standartlaşmaya yardımcı olur.

  2.   Buradan geçen biri dijo

    Bash, tüm dağıtımlarda varsayılan kabuk değildir ve bu nedenle / bin / sh sembolik bağlantısı her zaman bash'ı göstermez. Örneğin Debian'da (ve dolayısıyla Ubuntu olduğunu varsayıyorum):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 kök kök 4 aza 8 2014 / bin / sh -> kısa çizgi
    Bu nedenle Debian'daki varsayılan kabuk tire'dir. Buraya bakın: https://wiki.debian.org/Shell

  3.   isimsiz dijo

    Kullanımdaki Kabuğu öğrenmek için bir ipucu olarak:

    echo $ 0
    echo $ SHELL
    env | grep KABUK

  4.   Jose Albert dijo

    Gerçekten haklısın! DEBIAN 9 ve Kali Linux 2.0 üzerinde test ettim ve bu doğru! seni fırlatır. Daha da fazlası, kullanmak istediğiniz Kabuk ise: #! / Usr / bin / env bash önerisi.

    Ve kesinlikle haklısınız, bu bir shebang, ancak bazı web sitelerinde (teknik literatürler) buna shabang veya başka kelimeler diyorlar, bu yüzden benim kafa karışıklığım. Misal:

    Hesaplamada, bir satır, bir komut dosyasının başlangıcındaki sayı işareti ve ünlem işaretinden (#!) Oluşan karakter dizisidir. Aynı zamanda sha-bang, [1] [2] hashbang, [3] [4] pound-bang, [5] veya hash-pling olarak da adlandırılır.

    arasında: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    Y Bölüm 2. Bir Sha-Bang ile Başlamak
    arasında: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Jose Albert dijo

    Ayrıca: basename $ 0