Bygg ditt program steg för steg med hjälp av Shell Scripting - Del 2

I del 1 från den här serien kommer vi ihåg hur man implementerar en:

Och i tidigare blötläggde vi oss själva bättre praxis att följa när du skapar ett utmärkt Shell-skript i Bash för Linux, och mycket specifikt när det gäller att designa en Shebang och en BSM (Bash Strict Mode / Strict Bash Mode).

Bästa metoder för att skapa ett Shell-skript i GNU / Linux - Del 1

Bästa metoder för att skapa ett Shell-skript i GNU / Linux - Del 2

 

Shell-skriptI det här inlägget kommer vi att se hur man implementerar en Modul för miljövariabler för ett Shell-skript i Bash för Linux, som ett exempel på en av mina program (applikationer) fakta i en Skalskript kallade Linux Post Install - Bicentennial Script 8.0, men först en liten sammanfattning av bättre praxis så att du håller dem i åtanke:

  • Indente din kod,
  • Lägg till separata mellanslag mellan kodavsnitt,
  • Kommentera så mycket du kan på koden,
  • Skapa variabler med beskrivande namn på deras funktioner,
  • Använd syntaxen VARIABLE = $ (kommando) för att byta ut kommandot
  • Använd moduler och / eller variabler för: Superanvändare och auktoriserad användarvalidering med eller utan etablerade lösenord.
  • Använd moduler och / eller variabler för: Validering av operativsystemet (Distro, version, arkitektur, bland andra.),
  • Använd moduler (procedurer / avsnitt) för att bekräfta utförandet av kritiska eller batchåtgärder (aktiviteter / funktioner),
  • Tillhandahåll användarvänliga gränssnitt (användarvänligt): Efter terminal (med menyer och färger med dialog) och / eller skrivbord (med Windows som använder Zenity och Gxmessage),
  • Inkludera moduler av välkomst och farväl (meddelanden) till användaren, om det behövs,
  • Inkludera en dubbelkörningsverifieringsmodul,
  • Rationalisera skriptstorleken med externa funktioner och / eller moduler,
  • Ringa på ett tydligt och tydligt sätt samtal till andra tolkar,
  • Tillämpa andra logiska och rationella rekommendationer som du anser vara nödvändiga.

Här är ett exempel på en Modul för miljövariabler för ett Shell-skript i Bash för Linux. Detta bör vara modulen (avsnittet) som innehåller alla de vissa eller troliga variabler som Skalskript behöver eller kommer att behöva för dess genomförande. Jag lägger personligen till följande:


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

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

Obs: Beroende på dina krav eller implementeringar kan du lägga till kommandokommandot exportera min_variabel under var och en av de föregående variablerna som skapats eller skapa och exportera dina egna variabler som skapats direkt med kommandokommandot exportera min_variabel = min_parametrar

Senare, i framtida inlägg kommer vi att fortsätta se ett exempel på moduler (sektioner) som utför funktioner som:

  • DOBBELT UTFÖRANDE DETEKTIONSMODUL eller MISSLÅTT UTFÖRANDE
  • OPTIMERINGSMODUL
  • ANVÄNDARGODKÄNNANDEMODUL MED LÖSENORD
  • DETEKTIONSMODUL FÖR ARKITEKTUREN FÖR DRIFTSYSTEMET
  • KODNINGSSPRÅKKONFIGURERINGSMODUL
  • NÄRKONFIGURATIONSMODUL FÖR UTFÖRINGSMILJÖ

Bland många andra!

De kan självläras om kommandona: gksu, dialog, gxmessage, zenity, espeak, play, bland många andra för att skapa grafiska gränssnitt via Terminal eller för användarens skrivbord, med ljud- eller multimediavarningar, och främja kunskap som de kommer att använda senare.

Kom ihåg att dessa och andra rekommendationer på vissa modul, funktion, variabel, kommando eller åtgärd i allmänhet kan det genomföras många sätt, och det som visas här är bara ett enkel väg, av många möjliga och troliga sätt där sagt åtgärder kan eller kan genomföras!

Bara för att avsluta lämnar jag dig, a Screencast gjord av mig, för att visa dig vad du skulle kunna efter att ha avslutat detta Onlinekurs i Shell Scripting i DesdeLinux:

LPI-SB8 Test ScreenCast

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

 


Innehållet i artikeln följer våra principer om redaktionell etik. Klicka på för att rapportera ett fel här.

2 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   namnlös sade

    Datum för människor:
    eko -e «\ e [1; 32mDatum:» $ (datum «+% d-% m-% Y») «\ e [1; 32m Tid:» $ (datum «+% T»)

    Sann "uname -s":
    cat / proc / sys / kärna / ostype

    Distro namn:
    katt / etc / * släpp | klipp -f2 -d »| huvud -1

    Värdnamn:
    cat / proc / sys / kärna / värdnamn

    OS-arkitektur:
    [[-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

    Kärnversion:
    cat / proc / sys / kernel / osrelease

  2.   Ing. José Albert sade

    Jag gillade verkligen ditt första bidrag "datum för människor" eftersom produktionen skulle vara som ett exempel:

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

    Vilket effektivt i en dialog, zenity eller gxmessage fönster är mycket visuellt smältbart!

    Med ditt andra förslag skulle jag vilja placera det så här:

    om sant "uname -s" && cat / proc / sys / kernel / ostype; sedan eko "Operativsystem validerat"; fi | törst 1d

    Och slutligen tack så mycket för dina berikande bidrag som alltid!