Construiți-vă programul pas cu pas folosind Shell Scripting - Partea 2

În partea 1 Din această serie ne amintim cum să implementăm:

Și în celelalte anterioare, ne-am îmbibat bune practici de urmat atunci când se creează un excelent Script Shell în Bash pentru Linux, și foarte specific în ceea ce privește proiectarea a Shebang și un BSM (Bash Strict Mode / Strict Bash Mode).

Cele mai bune practici pentru a crea un script Shell în GNU / Linux - Partea 1

Cele mai bune practici pentru a crea un script Shell în GNU / Linux - Partea 2

shell a Scripting

În această intrare vom vedea cum să implementăm a Modulul de variabile de mediu pentru un script Shell în Bash pentru Linux, luând ca exemplu unul dintre ale mele programe (aplicații) fapte într-o Script Shell denumit Linux Post Install - Bicentennial Script 8.0, dar mai întâi un mic rezumat al bune practici ca să le ții cont:

  • Indentați codul dvs.,
  • Adăugați spații de separare între secțiuni de cod,
  • Comentează cât poți de mult codul,
  • Creați variabile cu nume descriptive ale funcțiilor lor,
  • Utilizați sintaxa VARIABLE=$(comandă) pentru înlocuirea comenzii
  • Utilizați module și/sau variabile de la: Superutilizator și Validare utilizator autorizat cu sau fără parole setate.
  • Utilizați module și/sau variabile din: Validarea sistemului de operare (Distro, Versiune, Arhitectură, printre altele.),
  • Utilizați module (proceduri / secțiuni) pentru a confirma execuția acțiunilor critice sau în lot (activități / funcții),
  • Furnizați interfețe ușor de utilizat: pe terminal (cu meniuri și culori folosind Dialog) și/sau pe desktop (cu Windows folosind Zenity și Gxmessage),
  • Includeți module pentru Bun venit și Adio (mesaje) către utilizator, dacă este necesar,
  • Includeți un modul de verificare a rulării duble,
  • Simplificați dimensiunea scriptului cu funcții și/sau module externe,
  • Invocați clar și evident apelurile către alți interpreți,
  • Aplicați orice alte recomandări logice și raționale pe care le considerați necesare.

Iată un exemplu de Modulul de variabile de mediu pentru un script Shell în Bash pentru Linux. Acesta ar trebui să fie modulul (secțiunea) care conține toate acele variabile sigure sau probabile pe care Script Shell are nevoie sau va avea nevoie pentru executarea lui. Eu personal adaug urmatoarele:


###############################################################################
# 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: În funcție de cerințele sau implementările dvs., puteți adăuga comanda de comandă export my_variable sub fiecare dintre variabilele create mai sus sau creați și exportați propriile variabile create direct cu comanda de comandă export my_variable=my_parameters

Mai târziu, în postările viitoare vom vedea în continuare un exemplu de module (secțiuni) care îndeplinesc funcții precum:

  • MODUL DE DETECȚIE DOUĂ EXECUȚIE sau EXECUȚIE EȘUATĂ
  • MODUL DE OPTIMIZARE
  • MODULUL DE AUTORIZARE A UTILIZATORULUI CU PAROLĂ
  • MODUL DE DETECTARE A ARHITECTURII SISTEMULUI DE OPERARE
  • MODULUL DE CONFIGURARE A LIMBII DE CODARE
  • MODUL DE CONFIGURARE PROXY PENTRU MEDIUL DE EXECUTARE

Printre multe altele!

Ei pot învăța singuri comenzile: gksu, dialog, gxmessage, zenity, speak, play, printre multe altele pentru a crea interfețe grafice prin Terminal sau pentru Desktopul utilizatorului, cu alerte sonore sau multimedia, și avansați cunoștințele pe care le vor folosi mai târziu.

Amintiți-vă că acestea și orice alte recomandări referitoare la unele modul, funcție, variabilă, comandă sau acțiune în general se poate realiza multe feluri, iar ceea ce este prezentat aici este doar unul calea usoara, Din multe modalități posibile și probabile în care a spus acțiunea poate sau poate fi efectuată!

Doar pentru a termina te las, a Screencast realizat de mine, pentru a vă arăta de ce ați fi capabil, după ce ați terminat acest lucru Curs online de Shell Scripting în DesdeLinux:

Test ScreenCast LPI-SB8

(LINUX POST INSTALL - SCRIPT BICENTENAR 8.0.0) - Partea 2


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   fără nume el a spus

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

    „uname -s” adevărat:
    cat /proc/sys/kernel/ostype

    Numele distribuției:
    cat /etc/*release | cut -f2 -d» | cap -1

    Numele gazdei:
    cat /proc/sys/kernel/hostname

    Arhitectura sistemului de operare:
    [[ -x /sbin/init ]] && fișier /sbin/init | awk „{printează $7}” | tr -d ',' || [[ -x /lib/systemd/systemd ]] && fișier /lib/systemd/systemd | awk „{printează $7}” | tr -d ',' 2> /dev/null

    Versiunea Kernel:
    cat /proc/sys/kernel/osrelease

  2.   Jose Albert el a spus

    Mi-a plăcut foarte mult prima ta contribuție „dată pentru oameni”, deoarece rezultatul ar rămâne ca exemplu:

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

    Care efectiv într-o fereastră de dialog, zenity sau gxmessage este foarte digerabilă vizual!

    Cu cea de-a doua sugestie aș dori să o exprim astfel:

    dacă adevărat «uname -s» && cat /proc/sys/kernel/ostype; apoi ecou «Sistem de operare validat» ; fi | sete 1d

    Și oricum, vă mulțumesc foarte mult pentru contribuțiile voastre îmbogățitoare, ca întotdeauna!