V 1. del te serije se spomnimo, kako uporabiti:
In v prejšnjih smo se namočili v boljše prakse slediti pri ustvarjanju odličnega Skript lupine v Bashu za Linux, in zelo natančno v smislu oblikovanja a Shebang in BSM (Bash Strict Mode / Strict Bash Mode).
Najboljše prakse za ustvarjanje skripta lupine v GNU / Linux - 1. del
Najboljše prakse za ustvarjanje skripta lupine v GNU / Linux - 2. del
V tej objavi bomo videli, kako uporabiti a Modul spremenljivk okolja za skript lupine v Bashu za Linux, za primer vzamem enega od mojih programi (aplikacije) dejstva v a Shell scenarij imenuje Linux Post Install - Bicentennial Script 8.0, ampak najprej majhen povzetek boljše prakse da jih boste imeli v mislih:
- Vstavite svojo kodo,
- Dodajte ločnice med odseke kode,
- Komentirajte kodo, kolikor lahko,
- Ustvarite spremenljivke z opisnimi imeni njihovih funkcij,
- Za zamenjavo ukaza uporabite sintakso VARIABLE = $ (ukaz)
- Uporabite module in / ali spremenljivke: Nadzor uporabnika in pooblaščenega uporabnika z določenimi gesli ali brez njih.
- Uporabite module in / ali spremenljivke: preverjanje veljavnosti operacijskega sistema (Distro, različica, arhitektura, med drugim.),
- Z moduli (postopki / odseki) potrdite izvajanje kritičnih ali paketnih dejanj (dejavnosti / funkcije),
- Zagotovite uporabniku prijazne vmesnike (uporabniku prijazen): s terminalom (z meniji in barvami z uporabo pogovornega okna) in / ali z namizjem (s sistemom Windows z Zenity in Gxmessage)
- Po potrebi vključite module dobrodošlice in slovesa (sporočila) uporabniku,
- Vključite dvojni modul za preverjanje,
- Racionalizirajte velikost skripte z zunanjimi funkcijami in / ali moduli,
- Na jasen in razločen način prikliči klice drugim tolmačem,
- Uporabite katero koli drugo logično in racionalno priporočilo, ki se vam zdi potrebno.
Tu je primer a Modul spremenljivk okolja za skript lupine v Bashu za Linux. To bi moral biti modul (odsek), ki vsebuje vse tiste določene ali verjetne spremenljivke, ki jih Shell scenarij potrebe ali bo potrebno za njegovo izvedbo. Osebno dodam naslednje:
###############################################################################
# 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
###############################################################################
===============
Opomba: Glede na vaše zahteve ali izvedbe lahko dodate ukaz ukaza izvozi my_variable pod vsako od predhodnih ustvarjenih spremenljivk ali ustvarite in izvozite lastne spremenljivke, ustvarjene neposredno z ukazom izvoz my_variable = moji_parametri
Kasneje bomo v prihodnjih objavah še naprej videli primer moduli (odseki) ki opravljajo funkcije, kot so:
- Dvojni modul za zaznavanje izvršitve ali neuspešna izvedba
- OPTIMIZACIJSKI MODUL
- MODUL DOVOLJENJA ZA UPORABNIKA Z GESLO
- MODUL ODKRIVANJA ARHITEKTURE OPERATIVNEGA SISTEMA
- KODIRANJE MODULA KONFIGURACIJE JEZIKA
- MODUL KONFIGURACIJE PROXY ZA IZVRŠILNO OKOLJE
Med mnogimi drugimi!
O ukazih se lahko samoučijo: gksu, pogovorno okno, gxmessage, zenity, espeak, play, med mnogimi drugimi za ustvarjanje grafičnih vmesnikov prek terminala ali uporabniškega namizja z zvočnimi ali večpredstavnostnimi opozoriliin pospešijo znanje, ki ga bodo uporabili kasneje.
Ne pozabite, da ta in katera koli druga priporočila za nekatere modul, funkcija, spremenljivka, ukaz ali dejanje na splošno se lahko izvede dosti načinov, in to, kar je prikazano tukaj, je samo eno preprost način, od veliko možnih in verjetnih načinov v katerem je rekel lahko ali bi se lahko izvedlo!
Za konec vas zapuščam, a Screencast, ki sem ga naredil jaz, da vam po tem, kar ste končali, pokažete, česa bi bili sposobni Shell Scripting spletni tečaj v DesdeLinux:
(LINUX POST INSTALL - SCRIPT BICENTENARIO 8.0.0) - 2. del
Datum za ljudi:
echo -e «\ e [1; 32mDatum:» $ (datum «+% d-% m-% Y») «\ e [1; 32m Čas:» $ (datum «+% T»)
Resnični "uname -s":
cat / proc / sys / kernel / ostype
Ime distributerja:
mačka / etc / * javnost | cut -f2 -d »| glava -1
Ime gostitelja:
mačka / proc / sys / jedro / ime gostitelja
Arhitektura OS:
[[-x / sbin / init]] && datoteka / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && datoteka / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null
Različica jedra:
cat / proc / sys / kernel / osrelease
Zelo mi je bil všeč vaš prvi prispevek "datum za ljudi", saj bi bil rezultat tak primer:
Datum: 11-02-2016 Čas: 16:04:10
Kar je v oknu za pogovorno okno, zenity ali gxmessage zelo vizualno prebavljivo!
Z vašim drugim predlogom bi ga rad postavil takole:
če je res, "uname -s" && cat / proc / sys / kernel / ostype; nato odmev "Preverjen operacijski sistem"; fi | žeja 1d
In na koncu najlepša hvala za vaše bogate prispevke kot vedno!