A Shell Scripting használatával - 2. rész - lépésről lépésre készítse el a programot

Az 1. rész ebből a sorozatból emlékszünk a következők megvalósítására:

Az előzőekben pedig beáztattuk magunkat jobb gyakorlatok követni, amikor kiváló Shell szkript a Bash Linux rendszerhez, és nagyon konkrétan a Shebang és egy BSM (Bash Strict Mode / Strict Bash Mode).

Bevált módszerek a Shell szkript létrehozására GNU / Linux rendszerben - 1. rész

Bevált módszerek a Shell szkript létrehozására GNU / Linux rendszerben - 2. rész

Shell Scripting

Ebben a bejegyzésben meglátjuk, hogyan lehet megvalósítani a Környezeti változók modul egy Shell szkripthez a Bash for Linux rendszerben, példaként véve az egyiket programok (alkalmazások) tények a Shell szkript hívott Linux Post Install - Bicentennial Script 8.0, de először egy kis összefoglaló a jobb gyakorlatok hogy szem előtt tartsa őket:

  • Indente a kódot,
  • Vegyen fel elválasztó szóközt a kódrészek között,
  • Kommentelje minél többet a kódot,
  • Hozzon létre változókat függvényeik leíró nevével,
  • Használja a VARIABLE = $ (parancs) szintaxist a parancs behelyettesítéséhez
  • Használja a következő modulokat és / vagy változókat: Szuperfelhasználó és Engedélyezett felhasználó érvényesítése megállapított jelszavakkal vagy anélkül.
  • Használja a következő modulokat és / vagy változókat: Az operációs rendszer ellenőrzése (többek között Distro, Version, Architecture),
  • Használjon modulokat (eljárásokat / szakaszokat) a kritikus vagy kötegelt műveletek (tevékenységek / funkciók) végrehajtásának megerősítésére,
  • Felhasználóbarát interfészek biztosítása (felhasználóbarát): Terminálonként (a menük és a színek a párbeszédablakot használva) és / vagy az Asztalon keresztül (Windows esetén a Zenity és a Gxmessage használatával),
  • Tartalmazza az üdvözlő és a búcsú (üzenetek) moduljait a felhasználónak, ha szükséges,
  • Tartalmazzon kettős végrehajtás-ellenőrző modult,
  • Racionalizálja a szkript méretét a Külső függvények és / vagy modulok segítségével,
  • Világos és egyértelmű módon hívja fel a többi tolmácsot,
  • Alkalmazzon bármilyen más logikus és racionális ajánlást, amelyet szükségesnek tart.

Itt van egy példa a Környezeti változók modul egy Shell szkripthez a Bash for Linux rendszerben. Ennek a modulnak (szakasznak) kell lennie, amely tartalmazza mindazokat a bizonyos vagy valószínű változókat, amelyeket a Shell szkript igényei vagy szükségei lesznek a végrehajtására. Én személy szerint hozzáteszem a következőket:


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

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

Megjegyzés: Az igényektől vagy megvalósítástól függően hozzáadhatja a parancsot exportálja a_változót az összes korábbi változó alatt létrehozta, vagy létrehozza és exportálja a közvetlenül a parancs paranccsal létrehozott saját változókat exportálom_változó = saját_paraméterek

Később, a jövőbeni bejegyzésekben továbbra is látunk példát modulok (szakaszok) amelyek olyan funkciókat látnak el, mint:

  • KETTŐS VÉGREHAJTÁS ÉSZLELÉSI MODUL vagy SIKER VÉGREHAJTÁS
  • OPTIMÁLÁSI MODUL
  • FELHASZNÁLÓI ENGEDÉLYEZÉSI MODUL JELSZÓVAL
  • AZ ÜZEMELTETÉSI RENDSZER ÉPÍTÉSZETÉNEK ÉSZLELÉSI MODULJA
  • A NYELV KONFIGURÁLÁSÁNAK KÓDOLÁSA
  • PROXIKONFIGURÁLÓ MODUL A VÉGREHAJTÁSI KÖRNYEZETHEZ

Sok más mellett!

Mehetnek autodidakta módon a parancsokra: gksu, párbeszéd, gxmessage, zenity, espeak, play, sok más mellett grafikus interfészek létrehozása a terminálon vagy a Felhasználói asztalon, szonikus vagy multimédiás riasztásokkal, és ismerje meg azokat, amelyeket később használni fognak.

Ne feledje, hogy ezek és néhány más ajánlás egyesekre vonatkozik modul, függvény, változó, parancs vagy művelet általában kivitelezhető sokféleképp, és ami itt látható, csak egy egyszerű módon, a sok lehetséges és valószínű módon amelyben azt mondta intézkedést lehet vagy lehet végrehajtani!

Csak befejezésül hagylak, a Screencast általam készített, hogy megmutassa, mire lenne képes, miután ezt befejezte Shell Scripting online tanfolyam itt DesdeLinux:

LPI-SB8 teszt ScreenCast

(LINUX POST INSTALL - BICENNNIAL SCRIPT 8.0.0) - 2. rész


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   névtelen dijo

    Dátum emberek számára:
    echo -e «\ e [1; 32mDátum:» $ (dátum «+% d-% m-% Y») «\ e [1; 32m Idő:» $ (dátum «+% T»)

    Igaz "uname -s":
    macska / proc / sys / kernel / ostype

    Distro neve:
    macska / etc / * kiadás | vágás -f2 -d »| fej -1

    Gazdanév:
    macska / proc / sys / kernel / hosztnév

    OS architektúra:
    [[-x / sbin / init]] && fájl / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && fájl / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null

    Kernel verzió:
    macska / proc / sys / kernel / osrelease

  2.   José Albert dijo

    Nagyon tetszett az első hozzászólásod "dátum az emberek számára", mivel a kimenet példaként szolgálna:

    Dátum: 11. Idő: 02:2016:16

    Ami egy párbeszédablakban, a zenity vagy a gxmessage ablakban vizuálisan nagyon emészthető!

    A második javaslatával a következőképpen szeretném megfogalmazni:

    ha igaz "uname -s" && cat / proc / sys / kernel / ostype; majd visszhangozza: "Az operációs rendszer ellenőrzése"; fi | szomjúság 1d

    És végül, nagyon köszönöm a gazdagító közreműködését, mint mindig!