Crea il tuo programma passo dopo passo usando Shell Scripting - Parte 2

Qui alla il 1 di questa serie ricordiamo come implementare un:

E in quelli precedenti, ci siamo immersi nel migliori pratiche da seguire quando si crea un eccellente Script di shell in Bash per Linux, e molto specificamente in termini di progettazione di un file Shebang e un BSM (Bash Strict Mode / Strict Bash Mode).

Migliori pratiche per creare uno script di shell in GNU / Linux - Parte 1

Migliori pratiche per creare uno script di shell in GNU / Linux - Parte 2

Shell Scripting

In questo post vedremo come implementare un file Modulo Variabili d'ambiente per uno script shell in Bash per Linux, prendendo come esempio uno dei miei programmi (applicazioni) fatti in a Script di shell detto Linux Post Install - Bicentennial Script 8.0, ma prima un piccolo riassunto del migliori pratiche in modo da tenerli a mente:

  • Indente il tuo codice,
  • Aggiungi spazi di separazione tra sezioni di codice,
  • Commenta il più possibile sul codice,
  • Crea variabili con nomi descrittivi delle loro funzioni,
  • Utilizzare la sintassi VARIABILE = $ (comando) per la sostituzione del comando
  • Utilizzare moduli e / o variabili di: Superuser e Convalida utente autorizzato con o senza password stabilite.
  • Utilizza moduli e / o variabili di: Validazione del sistema operativo (Distro, Versione, Architettura, tra gli altri.),
  • Utilizzare moduli (procedure / sezioni) per confermare l'esecuzione di azioni critiche o batch (attività / funzioni),
  • Fornire interfacce user friendly (userfriendly): da terminale (con menu e colori utilizzando la finestra di dialogo) e / o da desktop (con Windows che utilizza Zenity e Gxmessage),
  • Includere moduli di Benvenuto e Addio (messaggi) all'utente, se necessario,
  • Includere un modulo di verifica a doppia corsa,
  • Razionalizza la dimensione dello script con funzioni esterne e / o moduli,
  • Richiamare in modo chiaro ed evidente le chiamate ad altri Interpreti,
  • Applica qualsiasi altra raccomandazione logica e razionale che ritieni necessaria.

Ecco un esempio di a Modulo Variabili d'ambiente per uno script shell in Bash per Linux. Questo dovrebbe essere il modulo (sezione) che contiene tutte quelle variabili certe o probabili che il file Script di shell necessita o avrà bisogno per la sua esecuzione. Personalmente aggiungo quanto segue:


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

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

Nota: A seconda dei requisiti o delle implementazioni è possibile aggiungere il comando comando esporta mia_variabile sotto ciascuna delle variabili precedenti create o crea ed esporta le tue variabili create direttamente con il comando comando esporta mia_variabile = miei_parametri

Successivamente, nei post futuri continueremo a vedere un esempio di moduli (sezioni) che svolgono funzioni come:

  • MODULO RILEVAMENTO DOPPIA ESECUZIONE o ESECUZIONE FALLITA
  • MODULO DI OTTIMIZZAZIONE
  • MODULO AUTORIZZAZIONE UTENTE CON PASSWORD
  • MODULO DI RILEVAZIONE DELL'ARCHITETTURA DEL SISTEMA OPERATIVO
  • MODULO DI CONFIGURAZIONE DELLA LINGUA DI CODIFICA
  • MODULO DI CONFIGURAZIONE DEL PROXY PER L'AMBIENTE DI ESECUZIONE

Tra tanti altri!

Possono andare da autodidatti sui comandi: gksu, dialogo, gxmessage, zenity, espeak, play, tra molti altri creare interfacce grafiche da Terminale o per il Desktop dell'Utente, con avvisi sonori o multimedialie anticipare la conoscenza che useranno in seguito.

Ricorda che questi e altri consigli su alcuni modulo, funzione, variabile, comando o azione in generale può essere eseguito molti modie ciò che viene mostrato qui è solo uno modo semplice, Del molti modi possibili e probabili in cui ha detto l'azione può o potrebbe essere eseguita!

Solo per finire ti lascio, a Screencast realizzato da me, per mostrarti di cosa saresti capace, dopo averlo completato Corso online di Shell Scripting in DesdeLinux:

ScreenCast di test LPI-SB8

(LINUX POST INSTALL - SCRIPT BICENTENARIO 8.0.0) - Parte 2


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   senza nome suddetto

    Data per gli esseri umani:
    echo -e «\ e [1; 32mData:» $ (data «+% d-% m-% Y») «\ e [1; 32m Ora:» $ (data «+% T»)

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

    Nome Distro:
    cat / etc / * release | cut -f2 -d »| testa -1

    Nome host:
    cat / proc / sys / kernel / hostname

    Architettura del sistema operativo:
    [[-x / sbin / init]] && file / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && file / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null

    Versione del kernel:
    cat / proc / sys / kernel / osrelease

  2.   Ing. José Albert suddetto

    Mi è piaciuto molto il tuo primo contributo "data per gli umani" poiché l'output sarebbe come un esempio:

    Data: 11-02-2016 Ora: 16:04:10

    Che effettivamente in una finestra di dialogo, zenity o gxmessage è molto visivamente digeribile!

    Con il tuo secondo suggerimento vorrei posizionarlo in questo modo:

    se vero "uname -s" && cat / proc / sys / kernel / ostype; quindi echo "Sistema operativo convalidato"; fi | sete 1d

    E infine, grazie mille per i tuoi contributi arricchenti come sempre!