Rakenna ohjelma vaihe vaiheelta käyttämällä Shell Scripting - Osa 2

Että osa 1 tästä sarjasta muistamme kuinka toteuttaa:

Ja edellisissä liotimme itsemme parempia käytäntöjä seurata, kun luot erinomaisen Shell-komentosarja Bash for Linuxissa, ja erityisesti suunnittelun kannalta Shebang ja BSM (Bash Strict Mode / Strict Bash Mode).

Parhaat käytännöt Shell-komentosarjan luomiseen GNU / Linuxissa - osa 1

Parhaat käytännöt Shell-komentosarjan luomiseen GNU / Linuxissa - osa 2

 

Shell-komentosarjatTässä viestissä näemme, miten a Ympäristömuuttujien moduuli Shell-komentosarjalle Bash for Linuxissa, ottaen esimerkkinä yhden minun ohjelmat (sovellukset) tosiasiat a Shell-komentosarja nimeltään Linux Post Install - kaksisatainen skripti 8.0, mutta ensin pieni yhteenveto parempia käytäntöjä niin, että pidät ne mielessä:

  • Indente koodisi,
  • Lisää välilyöntejä koodiosien välillä,
  • Kommentoi niin paljon kuin voit koodia,
  • Luo muuttujia, joissa on toimintojen kuvaavat nimet,
  • Käytä komentojen korvaamiseen syntaksia VARIABLE = $ (komento)
  • Käytä moduuleja ja / tai muuttujia: Pääkäyttäjä ja valtuutettu käyttäjän validointi vakiintuneilla salasanoilla tai ilman niitä.
  • Käytä moduuleja ja / tai muuttujia: Käyttöjärjestelmän validointi (muun muassa Distro, Version, Architecture),
  • Käytä moduuleja (menettelyt / osiot) vahvistaaksesi kriittisten tai erätoimintojen (toiminnot / toiminnot) suorittamisen,
  • Tarjota käyttäjäystävällisiä käyttöliittymiä (käyttäjäystävällisiä): Päätteen (valikkojen ja värien valinta Dialogin avulla) ja / tai työpöydän (Windows, jossa Zenity ja Gxmessage) avulla,
  • Sisällytä moduuleja Tervetuloa ja Jäähyväiset (viestit) käyttäjälle, jos tarpeen,
  • Sisällytä kaksoisajotodennusmoduuli,
  • Rationoi komentosarjan koko ulkoisilla toiminnoilla ja / tai moduuleilla,
  • Kutsu selkeästi ja ilmeisesti muille tulkeille,
  • Käytä muita loogisia ja järkeviä suosituksia, joita pidät tarpeellisina.

Tässä on esimerkki a Ympäristömuuttujien moduuli Shell-komentosarjalle Bash for Linuxissa. Tämän pitäisi olla moduuli (osa), joka sisältää kaikki ne tietyt tai todennäköiset muuttujat, jotka Shell-komentosarja tarpeita tai tarvitsee sen toteuttamista. Lisään henkilökohtaisesti seuraavat:


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

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

Huom: Vaatimuksista tai toteutuksista riippuen voit lisätä komentokomennon vie oma_muuttuja kunkin aiemmin luodun muuttujan alapuolella tai luo ja vie omat muuttujat, jotka on luotu suoraan komentokomennolla export my_variable = my_parameters

Myöhemmin tulevissa viesteissä näemme edelleen esimerkin moduulit (osiot) jotka suorittavat toimintoja, kuten:

  • KAKSOISKÄYTÖN TUNNISTAMISMODUULI tai Epäonnistunut toteutus
  • OPTIMOINTIMODUULI
  • KÄYTTÄJÄN HYVÄKSYMISMODUULI SALASANALLA
  • KÄYTTÖJÄRJESTELMÄN ARKITEHTUURIN HAVAINMODUULI
  • KIELEN KOKOONPANO-MODUULI
  • PROXY-MÄÄRITTELYMODUULI TOTEUTUSYMPÄRISTÖLLE

Monien muiden joukossa!

He voivat opetella itseopetusta komennoista: gksu, dialogi, gxmessage, zenity, espeak, play, monien muiden joukossa luoda graafisia käyttöliittymiä päätelaitteen tai käyttäjän työpöydän kautta ääni- tai multimediavaroituksillaja lisää tietoa, jota he käyttävät myöhemmin.

Muista, että nämä ja muut suositukset joillekin moduuli, toiminto, muuttuja, komento tai toiminto yleensä se voidaan suorittaa monia tapoja, ja mitä tässä näytetään, on vain yksi yksinkertainen tapa, monia mahdollisia ja todennäköisiä tapoja jossa sanottiin voidaan tai voidaan suorittaa!

Aion lopettaa jätän sinut, a Minun tekemä kuvaruutu, näyttääksesi mihin kykenisit tämän jälkeen Shell Scripting -verkkokurssi DesdeLinuxissa:

LPI-SB8-testinäyttö

(LINUX POST INSTALL - BICENENNIAL SCRIPT 8.0.0) - Osa 2

 


Artikkelin sisältö noudattaa periaatteita toimituksellinen etiikka. Ilmoita virheestä napsauttamalla täällä.

2 kommenttia, jätä omasi

Jätä kommentti

Sähköpostiosoitettasi ei julkaista.

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   nimetön dijo

    Päivämäärä ihmisille:
    echo -e «\ e [1; 32mPäiväys:» $ (päiväys «+% d-% m-% Y») «\ e [1; 32m aika:» $ (päivämäärä «+% T»)

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

    Distron nimi:
    kissa / etc / * julkaisu | leikkaus -f2 -d »| pää -1

    Isäntänimi:
    cat / proc / sys / kernel / hostname

    Käyttöjärjestelmän arkkitehtuuri:
    [[-x / sbin / init]] && tiedosto / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && tiedosto / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null

    Ytimen versio:
    cat / proc / sys / kernel / osrelease

  2.   Jose Albert dijo

    Pidin todella ensimmäisestä julkaisustasi "päivämäärä ihmisille", koska tulos olisi esimerkki:

    Päivämäärä: 11-02-2016 Aika: 16:04:10

    Mikä tehokkaasti valintaikkunassa, zenityssä tai gxmessage-ikkunassa on visuaalisesti hyvin sulavaa!

    Toisella ehdotuksellasi haluaisin sijoittaa sen näin:

    jos tosi "uname -s" && cat / proc / sys / kernel / ostype; sitten kaiku "Valvottu käyttöjärjestelmä"; fi | jano 1d

    Ja lopuksi, kiitos paljon rikastuttavasta panoksestasi kuten aina!