Ndërtoni programin tuaj hap pas hapi duke përdorur Shell Scripting - Pjesa 2

Pjesa 1 nga kjo seri ne kujtojmë se si të zbatojmë një:

Dhe në ato të mëparshme, ne u lagëm praktikat më të mira për të ndjekur kur krijoni një shkëlqyer Skenari Shell në Bash për Linux, dhe shumë specifikisht në aspektin e hartimit të një Shebang dhe një BSM (Modaliteti i rreptë i Bashit / Modaliteti i rreptë i Bashit).

Praktikat më të mira për të krijuar një Shell Script në GNU / Linux - Pjesa 1

Praktikat më të mira për të krijuar një Shell Script në GNU / Linux - Pjesa 2

Shell Scripting

Në këtë postim do të shohim se si të implementojmë një Moduli i Variablave të Mjedisit për një Skript Shell në Bash për Linux, duke marrë si shembull një nga timen programe (aplikacione) fakte në a Skenari i guaskës i quajtur Instalimi i Postimit Linux - Skenari Bicentennial 8.0, por së pari një përmbledhje e vogël e praktikat më të mira në mënyrë që t'i mbani në mendje:

  • Indente kodin tuaj,
  • Shtoni hapësira ndarëse midis seksioneve të kodit,
  • Komentoni sa më shumë për kodin,
  • Krijoni variabla me emra përshkrues të funksioneve të tyre,
  • Përdorni sintaksën VARIABLE = $ (komanda) për zëvendësimin e komandës
  • Përdorni module dhe / ose ndryshore të: Superuser dhe Vlerësimi i Autorizuar i Përdoruesit me ose pa fjalëkalime të vendosura.
  • Përdorni module dhe / ose ndryshore të: Vleresimi i Sistemit Operativ (Distro, Version, Architecture, ndër të tjera.),
  • Përdorni module (procedura / seksione) për të konfirmuar ekzekutimin e veprimeve kritike ose të grupeve (aktivitetet / funksionet),
  • Siguroni ndërfaqe miqësore për përdoruesit (miqësore për përdoruesin): Nga Terminali (me menu dhe ngjyra duke përdorur dialogun) dhe / ose nga desktopi (me Windows duke përdorur Zenity dhe Gxmessage),
  • Përfshini modulet e Mirëseardhjes dhe Lamtumirës (mesazhe) te përdoruesi, nëse është e nevojshme,
  • Përfshini një modul verifikimi të dyfishtë,
  • Racionalizoni madhësinë e shkrimit me Funksionet e Jashtme dhe / ose Modulet,
  • Thirrni në një mënyrë të qartë dhe të qartë thirrjet drejt Përkthyesve të tjerë,
  • Zbatoni çdo rekomandim tjetër logjik dhe racional që e konsideroni të nevojshëm.

Këtu është një shembull i një Moduli i Variablave të Mjedisit për një Skript Shell në Bash për Linux. Ky duhet të jetë moduli (seksioni) që përmban të gjitha ato variabla të caktuara ose të mundshme që Skenari i guaskës ka nevojë ose do të ketë nevojë për ekzekutimin e tij. Unë personalisht shtoj sa vijon:


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

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

Shenim: Në varësi të kërkesave ose implementimeve tuaja mund të shtoni komandën komanduese eksporto variablin tim poshtë secilës prej variablave të mëparshëm të krijuar ose krijuar dhe eksportuar variablat tuaj të krijuar direkt me komandën komanduese eksporto variablin tim = parametrat e mi

Më vonë, në postimet e ardhshme ne do të vazhdojmë të shohim një shembull të modulet (seksionet) që kryejnë funksione të tilla si:

  • MODULI I ZBULIMIT T D DYFISHT EX T EX ZBATIMIT ose ZBATIMI I D FASHTUAR
  • MODULI I OPTIMIZIMIT
  • MODULI I AUTORIZIMIT TER P USRDORUESIT ME FJAL
  • MODULI I ZBULIMIT T THE ARKITEKTURS S OF SISTEMIT OPERATIV
  • MODULI I KONFIGURIMIT T LAN GJUHS KODUESE
  • MODULI I KONFIGURIMIT PROXY PR MJEDISIN EKZEKUTUES

Ndër shumë të tjerë!

Ata mund të mësojnë vetë-mësuar për komandat: gksu, dialogu, gxmessage, zenity, espeak, play, ndër shumë të tjerë për të krijuar ndërfaqe grafike nga Terminali ose për Desktopin e Përdoruesit, me sinjalizime zanore ose multimediale, dhe avancojnë njohuritë që ata do të përdorin më vonë.

Mos harroni se këto dhe çdo rekomandim tjetër për disa moduli, funksioni, ndryshorja, komanda ose veprimi në përgjithësi mund të kryhet shume menyra, dhe ajo që tregohet këtu është vetëm një mënyrë e thjeshtë, të shumë mënyra të mundshme dhe të mundshme në të cilën tha veprimi mund ose mund të kryhet!

Thjesht për të mbaruar po të lë, a Transmetimi i ekranit i bërë nga unë, për t'ju treguar se për çfarë do të ishit të aftë, pasi ta përfundonit këtë Kursi në internet i Shell Scripting në DesdeLinux:

Ekrani i provës LPI-SB8

(INSTALIMI I POSTS LINUX - BICENTENARIO SHKRIMI 8.0.0) - Pjesa 2


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   pa emër dijo

    Data për njerëzit:
    echo -e «\ e [1; 32mDate:» $ (data «+% d-% m-% Y») «\ e [1; 32m Koha:» $ (data «+% T»)

    Vërtetë "uname -s":
    cat / proc / sys / kernel / ostipi

    Emri Distro:
    lëshimi i maces / etj / * | prerë -f2 -d »| kokë -1

    Emri i hostit:
    emri cat / proc / sys / kernel / host

    Arkitektura e sistemit operativ:
    [[-x / sbin / init]] && skedar / sbin / init | awk '{shtyp $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && skedar / lib / systemd / systemd | awk '{shtyp $ 7}' | tr -d ',' 2> / dev / null

    Versioni i bërthamës:
    cat / proc / sys / kernel / osrelease

  2.   Ing Jose Albert dijo

    Më pëlqente shumë kontributi juaj i parë "data për njerëzit" pasi rezultati do të ishte si një shembull:

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

    E cila në mënyrë efektive në një dritare dialogu, zeniteti ose gxmessage është shumë e kuptueshme nga ana vizuale!

    Me sugjerimin tuaj të dytë do të doja ta vendosja kështu:

    nëse është e vërtetë "uname -s" && cat / proc / sys / kernel / ostype; pastaj jehon "Sistemi operativ i vërtetuar"; fi | etje 1d

    Dhe së fundmi, faleminderit shumë për kontributet tuaja pasuruese si gjithmonë!