Erstellen Sie Ihr Programm Schritt für Schritt mit Shell Scripting - Teil 2

Im Teil 1 Aus dieser Serie erinnern wir uns daran, wie man Folgendes implementiert:

Und in den vorherigen haben wir uns eingeweicht bessere Praktiken zu folgen, wenn Sie eine ausgezeichnete erstellen Shell-Skript in Bash für Linux, und ganz speziell in Bezug auf die Gestaltung eines Shebang und ein BSM (Bash Strict Mode / Strict Bash Mode).

Best Practices zum Erstellen eines Shell-Skripts in GNU / Linux - Teil 1

Best Practices zum Erstellen eines Shell-Skripts in GNU / Linux - Teil 2

Shell Scripting

In diesem Beitrag werden wir sehen, wie man a implementiert Modul für Umgebungsvariablen für ein Shell-Skript in Bash für Linuxam Beispiel eines meiner Programme (Anwendungen) Fakten in a Shell-Skript namens Linux Post Install - Zweihundertjähriges Skript 8.0, aber zuerst eine kleine Zusammenfassung der bessere Praktiken damit Sie sie im Auge behalten:

  • Indente deinen Code,
  • Trennen Sie Leerzeichen zwischen Codeabschnitten.
  • Kommentieren Sie den Code so oft wie möglich.
  • Erstellen Sie Variablen mit beschreibenden Namen ihrer Funktionen.
  • Verwenden Sie die Syntax VARIABLE = $ (Befehl) für die Befehlssubstitution
  • Verwenden Sie Module und / oder Variablen von: Superuser- und autorisierte Benutzerüberprüfung mit oder ohne festgelegte Kennwörter.
  • Verwenden Sie Module und / oder Variablen von: Validierung des Betriebssystems (Distribution, Version, Architektur ua),
  • Verwenden Sie Module (Prozeduren / Abschnitte), um die Ausführung kritischer oder Batch-Aktionen (Aktivitäten / Funktionen) zu bestätigen.
  • Benutzerfreundliche Schnittstellen bereitstellen (benutzerfreundlich): Nach Terminal (mit Menüs und Farben über Dialog) und / oder nach Desktop (mit Windows unter Verwendung von Zenity und Gxmessage),
  • Fügen Sie dem Benutzer bei Bedarf Begrüßungs- und Abschiedsmodule (Nachrichten) hinzu.
  • Fügen Sie ein Modul zur Überprüfung der doppelten Ausführung hinzu.
  • Rationalisieren Sie die Größe des Skripts mit externen Funktionen und / oder Modulen.
  • Rufen Sie auf klare und offensichtliche Weise die Anrufe an andere Dolmetscher auf.
  • Wenden Sie jede andere logische und rationale Empfehlung an, die Sie für notwendig halten.

Hier ist ein Beispiel für eine Modul für Umgebungsvariablen für ein Shell-Skript in Bash für Linux. Dies sollte das Modul (Abschnitt) sein, das alle bestimmten oder wahrscheinlichen Variablen enthält, die das Shell-Skript braucht oder wird für seine Ausführung brauchen. Ich persönlich füge Folgendes hinzu:


###############################################################################
# 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
###############################################################################

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

Hinweis: Abhängig von Ihren Anforderungen oder Implementierungen können Sie den Befehl befehlen hinzufügen exportiere my_variable Unter jeder der zuvor erstellten Variablen können Sie eigene Variablen erstellen und exportieren, die direkt mit dem Befehl command erstellt wurden exportiere my_variable = my_parameters

Später in zukünftigen Beiträgen werden wir weiterhin ein Beispiel dafür sehen Module (Abschnitte) die Funktionen ausführen wie:

  • DOUBLE EXECUTION DETECTION MODULE oder FAILED EXECUTION
  • OPTIMIERUNGSMODUL
  • BENUTZERAUTORISIERUNGSMODUL MIT PASSWORT
  • ARCHITEKTURERKENNUNGSMODUL DES OPERATIVEN SYSTEMS
  • CODING LANGUAGE CONFIGURATION MODULE
  • PROXY-KONFIGURATIONSMODUL FÜR DIE AUSFÜHRUNGSUMGEBUNG

Unter vielen anderen!

Sie können sich die Befehle selbst beibringen: gksu, dialog, gxmessage, zenity, espeak, spielen, unter vielen anderen Erstellen grafischer Oberflächen über das Terminal oder für den Desktop des Benutzers mit Sonic- oder Multimedia-Warnungenund erweitern Sie das Wissen, das sie später verwenden werden.

Denken Sie daran, dass diese und andere Empfehlungen zu einigen Modul, Funktion, Variable, Befehl oder Aktion im Allgemeinen kann es durchgeführt werden viele Möglichkeitenund was hier gezeigt wird, ist nur eine einfacher Weg, Der viele mögliche und wahrscheinliche Wege in dem gesagt Aktion kann oder könnte durchgeführt werden!

Nur zum Schluss verlasse ich dich, a Screencast von mir gemacht, um Ihnen zu zeigen, wozu Sie in der Lage wären, nachdem Sie dies beendet haben Online-Kurs „Shell Scripting“ in DesdeLinux:

LPI-SB8 Test ScreenCast

(LINUX POST INSTALL - BICENTENNIAL SCRIPT 8.0.0) - Teil 2


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   namenlos sagte

    Datum für Menschen:
    echo -e «\ e [1; 32mDatum:» $ (Datum «+% d-% m-% Y») «\ e [1; 32m Zeit:» $ (Datum «+% T»)

    True "uname -s":
    cat / proc / sys / kernel / ostype

    Name der Distribution:
    cat / etc / * release | cut -f2 -d »| Kopf -1

    Hostname:
    cat / proc / sys / kernel / hostname

    Betriebssystemarchitektur:
    [[-x / sbin / init]] && Datei / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && Datei / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null

    Kernelversion:
    cat / proc / sys / kernel / osrelease

  2.   José Albert sagte

    Ihr erster Beitrag "Datum für Menschen" hat mir sehr gut gefallen, da die Ausgabe als Beispiel dienen würde:

    Datum: 11-02-2016 Zeit: 16:04:10

    Was effektiv in einem Dialog-, Zenity- oder Gxmessage-Fenster sehr gut verdaulich ist!

    Mit Ihrem zweiten Vorschlag möchte ich es so platzieren:

    wenn wahr "uname -s" && cat / proc / sys / kernel / ostype; dann echo "Betriebssystem validiert"; fi | Durst 1d

    Und zum Schluss vielen Dank für Ihre bereichernden Beiträge wie immer!