Izgradite svoj program korak po korak pomoću Shell skriptiranja - 2. dio

u 1. dio ove serije sjećamo se kako implementirati:

A u prethodnim smo se namakali bolje prakse slijediti pri stvaranju izvrsne Skripta školjke u Bashu za Linux, i vrlo konkretno u smislu dizajniranja a Shebang i BSM (Bash Strict Mode / Strict Bash Mode).

Najbolji primjeri za stvaranje skripte ljuske u GNU / Linuxu - 1. dio

Najbolji primjeri za stvaranje skripte ljuske u GNU / Linuxu - 2. dio

Shell skriptiranje

U ovom ćemo postu vidjeti kako implementirati Modul varijabli okoline za skriptu ljuske u Bashu za Linux, uzimajući za primjer jedan moj programi (aplikacije) činjenice u a Shell skripta llamado Instalacija Linux post - Dvjestogodišnja skripta 8.0, ali prvo mali sažetak bolje prakse tako da ih imate na umu:

  • Uvucite svoj kod,
  • Dodajte razmake između odjeljaka koda,
  • Komentirajte što više koda,
  • Stvaranje varijabli s opisnim imenima njihovih funkcija,
  • Koristite sintaksu VARIABLE = $ (naredba) za zamjenu naredbe
  • Upotrijebite module i / ili varijable: Nadzor korisnika i ovlaštenih korisnika s ili bez utvrđenih lozinki.
  • Koristite module i / ili varijable: Provjera valjanosti operativnog sustava (Distro, Verzija, Arhitektura, između ostalog.),
  • Koristite module (postupci / odjeljci) za potvrđivanje izvršavanja kritičnih ili skupnih radnji (aktivnosti / funkcija),
  • Pružanje korisničkih sučelja (korisničkih): terminalom (s izbornicima i bojama pomoću dijaloškog okvira) i / ili radnom površinom (s Windowsima koji koriste Zenity i Gxmessage),
  • Po potrebi uključite module dobrodošlice i oproštaja (poruke) korisniku,
  • Uključite modul za dvostruku provjeru izvršenja,
  • Racionalizirajte veličinu skripte s vanjskim funkcijama i / ili modulima,
  • Prizvati na jasan i evidentan način pozive drugim tumačima,
  • Primijenite bilo koju drugu logičnu i racionalnu preporuku koju smatrate potrebnom.

Evo primjera a Modul varijabli okoline za skriptu ljuske u Bashu za Linux. Ovo bi trebao biti modul (odjeljak) koji sadrži sve one određene ili vjerojatne varijable koje Shell skripta treba ili će trebati za njegovo izvršenje. Osobno dodajem sljedeće:


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

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

Napomena: Ovisno o vašim zahtjevima ili implementacijama, možete dodati naredbu naredbe izvozi my_variable ispod svake od prethodnih varijabli stvorenih ili kreirajte i izvezite vlastite varijable stvorene izravno naredbom naredbe izvoz my_variable = moji_parametri

Kasnije ćemo u budućim postovima i dalje vidjeti primjer moduli (odjeljci) koji izvode funkcije kao što su:

  • Dvostruki modul za otkrivanje izvršenja ili neuspješno izvršenje
  • MODUL OPTIMIZACIJE
  • MODUL Odobrenja korisnika s lozinkom
  • MODUL OTKRIVANJA ARHITEKTURE OPERATIVNOG SUSTAVA
  • KODIRANJE MODULA KONFIGURACIJE JEZIKA
  • PROFI KONFIGURACIJSKI MODUL ZA IZVRŠNO OKRUŽENJE

Između mnogih drugih!

Mogu se samoučiti oko naredbi: gksu, dijalog, gxmessage, zenity, espeak, play, među mnogim drugima za stvaranje grafičkih sučelja pomoću terminala ili za korisničku radnu površinu, sa zvučnim ili multimedijskim upozorenjima, i unaprijediti znanje koje će kasnije koristiti.

Imajte na umu da su ove i bilo koje druge preporuke za neke modul, funkcija, varijabla, naredba ili radnja općenito se može provesti Mnogo načina, a ono što je ovdje prikazano nije ništa drugo nego a jednostavan način, od mnogo mogućih i vjerojatnih načina u kojem je rekao akcija se može ili može provesti!

Samo da završim, ostavljam vas, a Screencast sam napravio ja, da vam pokažem za što biste bili sposobni, nakon što ovo dovršite Shell Scripting online tečaj u DesdeLinux:

LPI-SB8 Test ScreenCast

(LINUX POST INSTALACIJA - SCENARIJ BICENTENARIO 8.0.0) - Dio 2


2 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   bezimen dijo

    Datum za ljude:
    echo -e «\ e [1; 32mDatum:» $ (datum «+% d-% m-% Y») «\ e [1; 32m Vrijeme:» $ (datum «+% T»)

    Istinski "uname -s":
    mačka / proc / sys / kernel / ostype

    Naziv distribucije:
    mačka / etc / * release | izrezati -f2 -d »| glava -1

    Ime hosta:
    cat / proc / sys / kernel / hostname

    Arhitektura OS-a:
    [[-x / sbin / init]] && datoteka / sbin / init | awk '{ispis $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && datoteka / lib / systemd / systemd | awk '{ispis $ 7}' | tr -d ',' 2> / dev / null

    Verzija jezgre:
    mačka / proc / sys / kernel / osrelease

  2.   ing. Jose Albert dijo

    Zaista mi se svidio vaš prvi doprinos "datum za ljude" jer bi rezultat bio primjer:

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

    Što je učinkovito u dijaloškom, zenity ili gxmessage prozoru vrlo vizualno probavljivo!

    Uz vaš drugi prijedlog želio bih ga smjestiti ovako:

    ako je istinito "uname -s" && cat / proc / sys / kernel / ostype; zatim odjek "Ovjeren operativni sustav"; fi | žeđ 1d

    I na kraju, veliko hvala na vašim obogaćujućim doprinosima kao i uvijek!