Izgradite svoj program korak po korak koristeći Shell skriptiranje - Dio 2

u dio 1 ove serije pamtimo kako implementirati:

A u prethodnim smo se namakali bolje prakse slijediti prilikom stvaranja odličnog Shell skripta u Bashu za Linux, i vrlo konkretno u smislu dizajniranja a Shebang i BSM (Bash Strict Mode / Strict Bash Mode).

Najbolje prakse za stvaranje skripte ljuske u GNU / Linux - 1. dio

Najbolje prakse za stvaranje skripte ljuske u GNU / Linux - 2. dio

Shell skriptiranje

U ovom postu ćemo vidjeti kako implementirati a Modul varijabli okoline za skriptu ljuske u Bashu za Linux, uzimajući za primjer jedan moj programi (aplikacije) činjenice u a Shell script pozvana Linux Post Install - Bicentennial Script 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,
  • Stvorite varijable s opisnim imenima njihovih funkcija,
  • Koristite sintaksu VARIABLE = $ (naredba) za zamjenu naredbe
  • Koristite module i / ili varijable: Superkorisnika i Ovlaštene provjere korisnika sa ili bez utvrđenih lozinki.
  • Koristite module i / ili varijable: Provjere valjanosti operativnog sistema (Distro, Verzija, Arhitektura, između ostalog),
  • Koristite module (procedure / odjeljci) za potvrđivanje izvršenja kritičnih ili skupnih radnji (aktivnosti / funkcija),
  • Pružanje korisničkih sučelja (userfriendly): Terminalnim (sa izbornicima i bojama pomoću dijaloškog okvira) i / ili radnom površinom (sa Windowsima koji koriste Zenity i Gxmessage),
  • Po potrebi uključite module dobrodošlice i oproštaja (poruke) korisniku,
  • Uključite modul za dvostruko izvršenje,
  • 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čku 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 script treba ili će trebati za njegovo izvršenje. Ja lično 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 kreiranih varijabli ili kreirajte i izvezite vlastite varijable kreirane izravno naredbom naredbe izvoz my_variable = moji_parametri

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

  • Dvostruki modul za otkrivanje izvršenja ili neuspješno izvršenje
  • MODUL OPTIMIZACIJE
  • MODUL OVLAŠTENJA KORISNIKA SA LOZINKOM
  • MODUL OTKRIVANJA ARHITEKTURE OPERATIVNOG SUSTAVA
  • KODIRANJE MODULA KONFIGURACIJE JEZIKA
  • PROFISIJSKI MODUL KONFIGURACIJE ZA IZVRŠNO OKRUŽENJE

Između mnogih drugih!

Mogu se samoučiti oko naredbi: gksu, dijalog, gxmessage, zenity, espeak, play, između mnogih drugih za stvaranje grafičkih interfejsa pomoću terminala ili za radnu površinu korisnika, sa zvučnim ili multimedijskim upozorenjima, i unaprijediti znanje koje će kasnije koristiti.

Imajte na umu da 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 je samo jedno jednostavan način, of the mnogo mogućih i vjerovatnih načina u kojoj je rečeno akcija se može ili može provesti!

Samo da završim, ostavljam vas, a Screencast sam napravio ja, da vam pokažem za šta ste sposobni, nakon što ovo završite Shell Scripting online kurs u DesdeLinux:

LPI-SB8 Test ScreenCast

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


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   bezimena rekao je

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

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

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

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

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

    Verzija jezgre:
    cat / proc / sys / kernel / osrelease

  2.   ing. Jose Albert rekao je

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

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

    Što je efektivno u dijaloškom, zenit ili gxmessage prozoru vrlo vizualno probavljivo!

    Sa vašim drugim prijedlogom želio bih ga smjestiti ovako:

    ako je tačno "uname -s" && cat / proc / sys / kernel / ostype; zatim odjek "Provjeren operativni sistem"; fi | žeđ 1d

    I na kraju, puno vam hvala na bogatim doprinosima kao i uvijek!