Shell Scripting - Part 2 kullanarak programınızı adım adım oluşturun

In Bölüm 1 Bu serinin nasıl uygulanacağını hatırlıyoruz:

Ve öncekilerde, kendimizi ıslattık daha iyi uygulamalar mükemmel bir yaratırken takip etmek Linux için Bash'te kabuk komut dosyası, ve özellikle tasarım açısından Shebang ve bir BSM (Katı Sıkı Modu / Katı Darbe Modu).

GNU / Linux'ta bir Kabuk Komut Dosyası oluşturmak için en iyi uygulamalar - Bölüm 1

GNU / Linux'ta bir Kabuk Komut Dosyası oluşturmak için en iyi uygulamalar - Bölüm 2

Kabuk Betiği

Bu yazıda nasıl uygulanacağını göreceğiz Linux için Bash'te Kabuk Komut Dosyası için Ortam Değişkenleri Modülüörnek olarak benim programlar (uygulamalar) gerçekler Kabuk betiği denilen Linux Sonrası Yükleme - Bicentennial Script 8.0, ancak önce küçük bir özet daha iyi uygulamalar böylece onları aklınızda bulundurun:

  • Kodunuzu girin,
  • Kod bölümleri arasına ayırıcı boşluklar ekleyin,
  • Koda olabildiğince çok yorum yapın,
  • Fonksiyonlarının açıklayıcı adlarıyla değişkenler oluşturun,
  • Komut ikamesi için VARIABLE = $ (komut) sözdizimini kullanın
  • Şu modülleri ve / veya değişkenleri kullanın: Süper Kullanıcı ve Yetkili Kullanıcı Doğrulaması oluşturulmuş şifreler olsun veya olmasın.
  • Şu modülleri ve / veya değişkenleri kullanın: İşletim Sisteminin Doğrulanması (Distro, Sürüm, Mimari, diğerleri arasında.),
  • Kritik veya toplu eylemlerin (faaliyetler / işlevler) yürütülmesini onaylamak için modülleri (prosedürler / bölümler) kullanın,
  • Kullanıcı Dostu Arayüzler Sağlayın (Kullanıcı Dostu): Terminal ile (İletişim Kutusunu Kullanarak Menüler ve Renkler ile) ve / veya Masaüstüyle (Zenity ve Gxmessage kullanan Windows ile),
  • Gerekirse Hoş Geldiniz ve Elveda (mesajlar) modüllerini kullanıcıya dahil edin,
  • Çift çalıştırma doğrulama modülü içerir,
  • Kod boyutunu Harici İşlevler ve / veya Modüller ile rasyonelleştirmek,
  • Diğer Tercümanlara yapılan çağrıları açık ve açık bir şekilde çağırın,
  • Gerekli olduğunu düşündüğünüz diğer mantıklı ve rasyonel önerileri uygulayın.

İşte bir örnek Linux için Bash'te Kabuk Komut Dosyası için Ortam Değişkenleri Modülü. Bu, belirli veya olası tüm değişkenleri içeren modül (bölüm) olmalıdır. Kabuk betiği uygulanması için ihtiyaç duyar veya ihtiyaç duyacaktır. Şahsen şunları ekliyorum:


###############################################################################
# INICIO DEL MODULO DE VARIABLES DE ENTORNO DEL SCRIPT
###############################################################################

NOM_SCRIPT=lpi_sb8_inicio_2016.sh
# echo $NOM_SCRIPT
# Almacenar como una variable predeterminada el Nombre real del Script

USR1_VALID=sysadmin
# echo $USR1_VALID
# Almacenar como una variable predeterminada el Nombre de Usuario valido que podrá ejecutar el Script.
# Haga una variable por cada Usuario Autorizado.

PASSWD_VALID=lpi*sb8
# echo $PASSWD_VALID
# Almacenar como una variable predeterminada el Nombre de la contraseña valida que permitirá ejecutar el Script.
# Haga una variable por cada contraseña de cada Usuario Autorizado.

S_O_VALID=kali
# echo $S_O_VALID
# Almacenar como una variable predeterminada el tipo de Sistema operativo valido para donde debe ser ejecutado el Script.

HOST_VALID=hostmovil-sysadmin
# echo $HOST_VALID
# Almacenar como una variable predeterminada el nombre del host valido donde debe ser ejecutado el Script.

IP_VALID=192.168.1.107
# echo $IP_VALID
# Almacenar como una variable predeterminada el nombre del host valido donde debe ser ejecutado el Script.

MAC_VALID=44:8a:5b:f0:3d:f3
# echo $MAC_VALID
# Almacenar como una variable predeterminada el nombre del host valido donde debe ser ejecutado el Script.

FILE_LOCK=lpi_sb_file_lock.txt
# echo $FILE_LOCK
# Almacenar el nombre de archivo predeterminada por el sistema para evitar doble ejecuciones ó detectar ejecuciones fallidas.

IDSUPERUSER=$(id -u | awk '{print $1}')
# IDSUPERUSER=$(echo $UID)
# IDSUPERUSER=$(getent passwd $USER | cut -d: -f3)
# echo $IDSUPERUSER
# Almacenar IUD del Superusuario root

USER_NAME_1=$(cat /etc/passwd | grep 1000 | cut -d: -f1 | awk '{print $1}')
HOME_USER_NAME_1=/home/$USER_NAME_1
# echo $USER_NAME_1 $HOME_USER_NAME_1
# Almacenar el nombre del usuario 1000 y su /home. Probable unico y primer Usuario del Sistema.

USER_NAME_2=$(cat /etc/passwd | grep 1001 | cut -d: -f1 | sed -n '2p' | awk '{print $1}')
HOME_USER_NAME_2=/home/$USER_NAME_2
# echo $USER_NAME_2 $HOME_USER_NAME_2
# Almacenar el nombre del usuario 1001 y su /home. Probable segundo Usuario del Sistema.

ID_USERNAME_SESSION=$(for i in $(who | sed 1q | cut -c 1-8); do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $1}' ; done | sed 1q)
# echo $ID_USERNAME_SESSION
# Almacenar el ID del Nombre del primer usuario (alfabeticamente) detectado conectado (con sesión abierta) en el sistema.

USERNAME_ID_SESSION=$(for i in $(who | sed 1q | cut -c 1-8); do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $2}' ; done ; echo $i)
# echo $USERNAME_ID_SESSION
# Almacenar el Nombre del primer usuario (alfabeticamente) detectado conectado (con sesión abierta) en el sistema.

# ID_FIRST_USERNAME=$(for i in 1000 1001 1002 1003 1004; do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $1}' ; done | sed -n '1p')
# echo $ID_FIRST_USERNAME
# Almacenar el ID del Nombre del primer usuario creado en el sistema entre los ID del 1000 al 1005.
# Nota: Solo funciona con la opción -o desactivada del MODO BASH ESTRICTO ó SEGURO (Bash Strict Mode / BSM)

# ID_FIRST_USERNAME=$(for i in $(seq 1000 1999); do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $1}' ; done | sed -n '1p')
# echo $ID_FIRST_USERNAME
# Almacenar el ID del Nombre del primer usuario creado en el sistema.
# Nota: Solo funciona con la opción -o desactivada del MODO BASH ESTRICTO ó SEGURO (Bash Strict Mode / BSM)

UBICACION=$(echo $PWD)
# UBICACION=$(pwd)
# echo $UBICACION
# Almacenar ruta de ejecución del Script LPI-SB

FECHA_SISTEMA_AN=$(date +"%d %b %y")
# echo $FECHA_SISTEMA_AN
# Almacenar la fecha  Alfanumerica actual del Equipo

FECHA_SISTEMA_N=$(date +"%d %m %y")
# echo $FECHA_SISTEMA_N
# Almacenar la fecha Numerica actual del Equipo

DIA_ACTUAL=$(date +"%d")
# echo $DIA_ACTUAL
# Almacenar el día actual del Equipo

MES_ACTUAL_A=$(date +"%b")
# echo $MES_ACTUAL_A
# Almacenar el mes alfabetico actual del Equipo

MES_ACTUAL_N=$(date +"%m")
# echo $MES_ACTUAL_N
# Almacenarel mes numerico actual del Equipo

ANO_ACTUAL_2C=$(date +"%y")
# echo $ANO_ACTUAL_2C
# Almacenar el año (con 2 cifras) actual del Equipo

ANO_ACTUAL_4C=$(date +"%Y")
# echo $ANO_ACTUAL_4C
# Almacenar el año (con 4 cifras) actual del Equipo

HORA_SISTEMA=$(date +"%H:%M")
# echo $HORA_SISTEMA
# Almacenar la Hora actual del Equipo

HORA_ACTUAL=$(date +"%H")
# echo $HORA_ACTUAL
# Almacenar la Hora actual del Equipo

MINUTOS_ACTUAL=$(date +"%M")
# echo $MINUTOS_ACTUAL
# Almacenar la Hora actual del Equipo

TIPO_S_O_L=$(uname -o)
# echo $TIPO_S_O_L
# Almacena el nombre largo del tipo de Sistema Operativo encontrado.

TIPO_S_O_C=$(uname -s)
# echo $TIPO_S_O_C
# Almacena el nombre corto del tipo de Sistema Operativo encontrado.

NOM_DISTRO_L=$(cat /etc/os-release | grep NAME | grep -v "VERSION" | sed -n '2p' | cut -f2 -d\")
# NOM_DISTRO_L=$(lsb_release -d | sed 's/Description://')
# echo $NOM_DISTRO_L
# Almacena el nombre largo de la Distro detectada.

NOM_DISTRO_C=$(cat /etc/os-release | grep NAME | grep -v "VERSION" | sed -n '2p' | cut -f2 -d\" | awk '{print $1}')
# NOM_DISTRO_C=$(lsb_release -d | sed 's/Description://' | awk '{print $1}')
# echo $NOM_DISTRO_C
# Almacena el nombre corto de la Distro detectada.

ID_DISTRO=$(cat /etc/os-release | grep ID | grep -v "VERSION_ID" | grep -v "ID_LIKE" | sed 's/ID=//' | sed 's/"//g')
# ID_DISTRO=$(lsb_release -i | awk '{print $3}')
# echo $ID_DISTRO
# Almacena el ID de la Distro detectada.

VER_DISTRO=$(cat /etc/os-release | grep VERSION= | sed -n '1p' | sed 's/VERSION=//' | sed 's/"//g')
# VER_DISTRO=$(lsb_release -c | sed 's/Codename://')
# echo $VER_DISTRO
# Almacena el nombre de la versión de la Distro detectada.

ID_VER_DISTRO=$(cat /etc/os-release | grep VERSION_ID= | sed -n '1p' | sed 's/VERSION_ID=//' | sed 's/"//g')
# ID_VER_DISTRO=$(lsb_release -r | sed 's/Release://')
# echo $ID_VER_DISTRO
# Almacena el ID de la versión de la Distro detectada.

ARQ_DISTRO_COD=$(uname -m)
# echo $ARQ_DISTRO_COD
# Almacenar el Tipo de Arquitectura de la Distro detectada en forma codificada.

ARQ_DISTRO_COD=$(uname -m) ; if [[ "$ARQ_DISTRO_COD" = "x86" ]]; then ARQ_DISTRO_HUM=32; else ARQ_DISTRO_HUM=64; fi
# echo $ARQ_DISTRO_HUM
# Convertir el Tipo de Arquitectura de la Distro detectada en forma codificada a forma humana.

VER_KERNEL=$(uname -r)
# echo $VER_KERNEL
# Almacenar el Nombre del Arquitectura de la Distro detectada.

NOM_HOST=$(cat /etc/hostname)
# echo $NOM_HOST
# Almacenar el Nombre del Host donde se ejecuta el Script.

IP_ETH0=$(ifconfig eth0 | grep inet | grep -v inet6 | cut -d ":" -f 2 | cut -d " " -f 1)
MAC_ETH0=$(ifconfig eth0 | sed -n '1p' | awk '{print $5}')
# IP_INTERNA=$(hostname -I)
# echo $IP_ETH0 $MAC_ETH0
# Almacenar la IP / MAC del Host donde se ejecuta el Script.

echo "Variables de entorno cargadas sin errores, en 5 segundos la aplicación continuará ejecutandose"
sleep 5

###############################################################################
# FINAL DEL MODULO DE VARIABLES DE ENTORNO DEL SCRIPT
###############################################################################

===============

Not: Gereksinimlerinize veya uygulamalarınıza bağlı olarak komut komutunu ekleyebilirsiniz. değişkenimi dışa aktar Oluşturulan önceki değişkenlerin her birinin altında doğrudan komut komutuyla oluşturulmuş kendi değişkenlerinizi oluşturun ve dışa aktarın my_variable = my_parameters dışa aktar

Daha sonra, gelecekteki yayınlarda bir örnek görmeye devam edeceğiz modüller (bölümler) aşağıdaki gibi işlevleri yerine getiren:

  • ÇİFT UYGULAMA ALGILAMA MODÜLÜ veya BAŞARISIZ ÇALIŞMA
  • OPTİMİZASYON MODÜLÜ
  • ŞİFRELİ KULLANICI YETKİ MODÜLÜ
  • İŞLETİM SİSTEMİ MİMARİSİNİN TESPİT MODÜLÜ
  • KODLAMA DİLİ KONFİGÜRASYON MODÜLÜ
  • UYGULAMA ORTAMI İÇİN PROXY KONFİGÜRASYON MODÜLÜ

Diğerlerinin yanı sıra!

Komutları kendi kendilerine öğrenebilirler: gksu, diyalog, gxmessage, zenity, espeak, playdiğerleri arasında Sonik veya multimedya uyarıları ile Terminal veya Kullanıcı Masaüstü için grafik arayüzler oluşturmak içinve daha sonra kullanacakları bilgileri ilerletmek.

Unutmayın, bunlar ve bazı diğer öneriler modül, işlev, değişken, komut veya eylem genel olarak yapılabilir çok şekildeve burada gösterilen yalnızca bir basit yol, of birçok olası ve olası yol içinde söyledi eylem yapılabilir veya gerçekleştirilebilir!

Sadece bitirmek için senden ayrılıyorum Benim tarafımdan yapılan ekran video kaydı, bunu bitirdikten sonra neler yapabileceğinizi size göstermek için Shell Scripting çevrimiçi kursu DesdeLinux:

LPI-SB8 Test Ekranı

(LINUX POST INSTALL - BICENTENNIAL SCRIPT 8.0.0) - Bölüm 2


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.   isimsiz dijo

    İnsanlar için tarih:
    echo -e «\ e [1; 32mTarih:» $ (tarih «+% d-% m-% Y») «\ e [1; 32m Zaman:» $ (tarih «+% T»)

    Gerçek "uname -s":
    cat / proc / sys / kernel / ostype

    Dağıtım adı:
    cat / etc / * yayın | kesim -f2 -d »| kafa -1

    Ana bilgisayar adı:
    cat / proc / sys / kernel / hostname

    İşletim Sistemi Mimarisi:
    [[-x / sbin / init]] && dosya / sbin / init | awk '{baskı $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && dosya / lib / systemd / systemd | awk '{baskı $ 7}' | tr -d ',' 2> / dev / null

    Çekirdek sürümü:
    cat / proc / sys / kernel / osrelease

  2.   Jose Albert dijo

    Çıktı bir örnek olacağı için ilk katkınız olan "insanlar için randevu" gerçekten çok hoşuma gitti:

    Tarih: 11-02-2016 Saat: 16:04:10

    Bir diyalog, zenity veya gxmessage penceresinde etkili bir şekilde görsel olarak sindirilebilir!

    İkinci öneriniz ile bunu şu şekilde yerleştirmek istiyorum:

    doğruysa "uname -s" && cat / proc / sys / kernel / ostype; sonra echo "İşletim sistemi doğrulandı"; fi | susuzluk 1d

    Ve son olarak, her zamanki gibi zenginleştirici katkılarınız için çok teşekkür ederiz!