Bygg programmet trinn for trinn ved å bruke Shell Scripting - Del 2

I del 1 fra denne serien husker vi hvordan vi implementerer en:

Og i forrige, fuktet vi oss bedre praksis å følge når du lager et utmerket Shell-skript i Bash for Linux, og veldig spesifikt når det gjelder å designe en Shebang og en BSM (Bash Strict Mode / Strict Bash Mode).

Beste fremgangsmåter for å lage et Shell Script i GNU / Linux - Del 1

Beste fremgangsmåter for å lage et Shell Script i GNU / Linux - Del 2

Shell-skripting

I dette innlegget vil vi se hvordan vi implementerer en Modul for miljøvariabler for et Shell-skript i Bash for Linux, tar som et eksempel en av mine programmer (applikasjoner) fakta i en Shell-skript kalt Linux Post Install - Bicentennial Script 8.0, men først et lite sammendrag av bedre praksis slik at du holder dem i bakhodet:

  • Henter koden din,
  • Legg til skille mellomrom mellom seksjoner av kode,
  • Kommenter så mye du kan på koden,
  • Lag variabler med beskrivende navn på funksjonene,
  • Bruk syntaksen VARIABLE = $ (kommando) for kommandosubstitusjon
  • Bruk moduler og / eller variabler for: Superbruker og autorisert brukervalidering med eller uten etablerte passord.
  • Bruk moduler og / eller variabler av: Validering av operativsystemet (Distro, versjon, arkitektur, blant andre.),
  • Bruk moduler (prosedyrer / seksjoner) for å bekrefte utførelsen av kritiske eller batch-handlinger (aktiviteter / funksjoner),
  • Gi brukervennlige grensesnitt (brukervennlig): Etter terminal (med menyer og farger ved hjelp av dialog) og / eller ved skrivebord (med Windows som bruker Zenity og Gxmessage),
  • Inkluder moduler med velkomst og farvel (meldinger) til brukeren, om nødvendig,
  • Inkluder en dobbelkjøringsmodul,
  • Rasjonaliser størrelsen på skriptet med eksterne funksjoner og / eller moduler,
  • Påkalle på en klar og tydelig måte samtaler til andre tolker,
  • Bruk en hvilken som helst annen logisk og rasjonell anbefaling som du anser nødvendig.

Her er et eksempel på en Modul for miljøvariabler for et Shell-skript i Bash for Linux. Dette bør være modulen (seksjonen) som inneholder alle de bestemte eller sannsynlige variablene som Shell-skript trenger eller vil trenge for utførelsen. Jeg personlig legger til følgende:


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

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

Merk: Avhengig av dine krav eller implementeringer kan du legge til kommandokommandoen eksporter min_variabel under hver av de forrige variablene som er opprettet, eller opprett og eksporter dine egne variabler opprettet direkte med kommandokommandoen eksporter my_variable = my_parameters

Senere, i fremtidige innlegg, vil vi fortsette å se et eksempel på moduler (seksjoner) som utfører funksjoner som:

  • DOBBELT UTFØRELSESDETEKSJONSMODUL eller MISLAGT UTFØRING
  • OPTIMISERINGSMODUL
  • BRUKERautorisasjonsmodul med passord
  • MODUL FOR OPPDAGELSE AV ARKITEKTUREN FOR BETJENINGSSYSTEMET
  • KODERING SPRÅKKONFIGURASJONSMODUL
  • PROXY-KONFIGURASJONSMODUL FOR UTFØRINGSMILJØET

Blant mange andre!

De kan selvlære om kommandoene: gksu, dialog, gxmessage, zenity, espeak, play, blant mange andre for å lage grafiske grensesnitt ved Terminal eller for brukerens skrivebord, med lyd- eller multimediavarsler, og fremme kunnskap som de vil bruke senere.

Husk at disse og andre anbefalinger på noen modul, funksjon, variabel, kommando eller handling generelt kan det utføres mange måter, og det som vises her er bare ett enkel måteav mange mulige og sannsynlige måter der sagt handling kan eller kan utføres!

Bare for å fullføre forlater jeg deg, a Screencast laget av meg, for å vise deg hva du ville være i stand til etter å ha fullført dette Shell Scripting nettkurs i DesdeLinux:

LPI-SB8 Test ScreenCast

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


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   navnløs sa

    Dato for mennesker:
    ekko -e «\ e [1; 32mDato:» $ (dato «+% d-% m-% Y») «\ e [1; 32m Tid:» $ (dato «+% T»)

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

    Distro navn:
    cat / etc / * release | klipp -f2 -d »| hode -1

    Vertsnavn:
    cat / proc / sys / kjerne / vertsnavn

    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

    Kernelversjon:
    cat / proc / sys / kernel / osrelease

  2.   Ing. José Albert sa

    Jeg likte virkelig ditt første bidrag "dato for mennesker" siden produksjonen ville være som et eksempel:

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

    Som effektivt i en dialog, zenity eller gxmessage vindu er veldig visuelt fordøyelig!

    Med ditt andre forslag vil jeg plassere det slik:

    hvis sant "uname -s" && cat / proc / sys / kernel / ostype; deretter ekko "Operativsystem validert"; fi | tørst 1d

    Og til slutt, tusen takk for dine berikende bidrag som alltid!