Konstruu vian programon paŝon post paŝo per Shell Scripting - Parto 2

En la parto 1 de ĉi tiu serio ni memoras pri kiel efektivigi:

Kaj en antaŭaj, ni trempis nin pli bonaj praktikoj sekvi kreante bonegan Ŝela skripto en Bash por Linukso, kaj tre specife laŭ projektado de Shebang kaj BSM (Bash Strict Mode / Strict Bash Mode).

Plej bonaj praktikoj por krei Ŝelan Skripton en GNU / Linukso - Parto 1

Plej bonaj praktikoj por krei Ŝelan Skripton en GNU / Linukso - Parto 2

 

Ŝelaj SkriptojEn ĉi tiu afiŝo ni vidos kiel efektivigi Modulo pri Mediaj Variabloj por Ŝela Skripto en Bash por Linukso, prenante kiel ekzemplon unu el miaj programoj (aplikoj) faktoj en a Ŝela skripto nomata Linuksa Afiŝinstalo - Ducentjariĝa Skripto 8.0, sed unue malgranda resumo de la pli bonaj praktikoj por ke vi memoru ilin:

  • Indentu vian kodon,
  • Aldoni apartajn spacojn inter sekcioj de kodo,
  • Komentu laŭeble la kodon,
  • Kreu variablojn kun priskribaj nomoj de iliaj funkcioj,
  • Uzu la sintakson VARIABLE = $ (komando) por komanda anstataŭigo
  • Uzu modulojn kaj / aŭ variablojn de: Superuzanto kaj Rajtigita Uzanto-Validigo kun aŭ sen establitaj pasvortoj.
  • Uzu modulojn kaj / aŭ variablojn de: Validumado de la Operaciumo (Distro, Versio, Arkitekturo, inter aliaj.),
  • Uzu modulojn (proceduroj / sekcioj) por konfirmi la plenumon de kritikaj aŭ bataj agoj (agadoj / funkcioj),
  • Provizi Uzajn Amikajn Interfacojn (Amike Uzeblajn): Per Terminalo (kun Menuoj kaj Koloroj per Dialogo) kaj / aŭ per Labortablo (kun Vindozo per Zenity kaj Gxmessage),
  • Inkluzivi modulojn de Bonvenigo kaj Adiaŭo (mesaĝoj) al la uzanto, se necese,
  • Inkluzivi duoblan ekzekutan kontrolan modulon,
  • Raciigi la skriptan grandecon per Eksteraj Funkcioj kaj / aŭ Moduloj,
  • Alvoku en klara kaj evidenta maniero la alvokojn al aliaj Interpretistoj,
  • Apliku iun alian logikan kaj racian rekomendon, kiun vi konsideras necesa.

Jen ekzemplo de Modulo pri Mediaj Variabloj por Ŝela Skripto en Bash por Linukso. Ĉi tiu estu la modulo (sekcio), kiu enhavas ĉiujn certajn aŭ probablajn variablojn, kiujn la Ŝela skripto bezonas aŭ bezonos por ĝia ekzekuto. Mi persone aldonas jenon:


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

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

Noto: Depende de viaj postuloj aŭ efektivigoj, vi povas aldoni la komandon eksporti mian_variablon sub ĉiu el la antaŭaj variabloj kreitaj aŭ kreu kaj eksportu viajn proprajn variablojn kreitajn rekte per la komanda komando eksporti mian_variablon = miaj_parametroj

Poste, en estontaj afiŝoj ni daŭre vidos ekzemplon de moduloj (sekcioj) kiuj plenumas funkciojn kiel:

  • DOUBLE EXECUTION DETECTION MODULE aŭ Fiaska EKZEKTO
  • OPTIMIGA MODULO
  • MODULO DE A USTORO DE UZANTO KUN PASVORTO
  • MODULO DE DETEKTO DE LA ARKITEKTURO DE LA FUNKCIA SISTEMO
  • KODIGA LINGVA KONFIGURA MODULO
  • PROXIA KONFIGURA MODULO POR LA EKZEKTA MEDIO

Inter multaj aliaj!

Ili povas memlerniĝi pri la ordonoj: gksu, dialogo, gxmessage, zenity, parolado, ludado, inter multaj aliaj krei grafikajn interfacojn per Terminalo aŭ por la Uzanta Labortablo, kun sonaj aŭ plurmediaj atentigoj, kaj progresigu sciojn, kiujn ili uzos poste.

Memoru, ke ĉi tiuj kaj iuj aliaj rekomendoj pri iuj modulo, funkcio, variablo, komando aŭ ago ĝenerale ĝi povas esti efektivigita multaj manieroj, kaj kio estas montrita ĉi tie estas nenio pli ol a simpla maniero, de la multaj eblaj kaj probablaj manieroj en kiu diris ago povas aŭ povus esti efektivigita!

Nur por fini, mi lasas vin, a Screencast farita de mi, por montri al vi, pri kio vi kapablus, post kiam vi finos ĉi tion Interreta kurso pri Shell Scripting en DesdeLinux:

LPI-SB8 Test ScreenCast

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

 


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

2 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita.

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   sennomaj diris

    Dato por homoj:
    echo -e «\ e [1; 32mDato:» $ (dato «+% d-% m-% Y») «\ e [1; 32m Tempo:» $ (dato «+% T»)

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

    Distro-nomo:
    kato / ktp / * liberigi | tranĉi -f2 -d »| kapo -1

    Gastiganta nomo:
    cat / proc / sys / kernel / hostname

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

    Kerna Versio:
    cat / proc / sys / kernel / osrelease

  2.   Inĝeniero Jose Albert diris

    Mi tre ŝatis vian unuan kontribuon "dato por homoj", ĉar la eligo estus kiel ekzemplo:

    Dato: 11-02-2016 Tempo: 16:04:10

    Kio efike en dialogo, zenity aŭ gxmessage-fenestro estas tre vide digestebla!

    Kun via dua sugesto mi ŝatus meti ĝin tiel:

    se vera "uname -s" && cat / proc / sys / kernel / ostype; tiam e echu "Operaciumo validigita"; fi | soifo 1d

    Kaj fine, mi tre dankas vin pro viaj riĉigaj kontribuoj kiel ĉiam!