Δημιουργήστε το πρόγραμμά σας βήμα προς βήμα χρησιμοποιώντας το Shell Scripting - Μέρος 2

Στην μέρος 1 αυτής της σειράς θυμόμαστε πώς να εφαρμόσουμε ένα:

Και σε προηγούμενα, ενυδατωθήκαμε στο καλύτερες πρακτικές να ακολουθήσετε όταν δημιουργείτε μια εξαιρετική Σενάριο Shell στο Bash για Linux, και πολύ συγκεκριμένα όσον αφορά το σχεδιασμό ενός Shebang και BSM (Bash Strict Mode / Strict Bash Mode).

Βέλτιστες πρακτικές για τη δημιουργία ενός σεναρίου Shell στο GNU / Linux - Μέρος 1

Βέλτιστες πρακτικές για τη δημιουργία ενός σεναρίου Shell στο GNU / Linux - Μέρος 2

Shell Scripting

Σε αυτήν την ανάρτηση θα δούμε πώς να εφαρμόσουμε ένα Ενότητα μεταβλητών περιβάλλοντος για ένα σενάριο Shell στο Bash για Linux, λαμβάνοντας ως παράδειγμα ένα από τα δικά μου προγράμματα (εφαρμογές) γεγονότα σε Σενάριο κελύφους που ονομάζεται Εγκατάσταση Linux Post - Bententennial Script 8.0, αλλά πρώτα μια μικρή περίληψη του καλύτερες πρακτικές ώστε να τα έχετε υπόψη:

  • Εισάγετε τον κωδικό σας,
  • Προσθέστε διαχωριστικά διαστήματα μεταξύ τμημάτων κώδικα,
  • Σχολιάστε όσο μπορείτε στον κώδικα,
  • Δημιουργήστε μεταβλητές με περιγραφικά ονόματα των λειτουργιών τους,
  • Χρησιμοποιήστε τη σύνταξη VARIABLE = $ (εντολή) για αντικατάσταση εντολών
  • Χρησιμοποιήστε λειτουργικές μονάδες ή / και μεταβλητές: Επικύρωση Superuser και Authorized User με ή χωρίς καθορισμένους κωδικούς πρόσβασης.
  • Χρησιμοποιήστε ενότητες ή / και μεταβλητές: Επικύρωση του λειτουργικού συστήματος (Distro, Version, Architecture, μεταξύ άλλων.),
  • Χρησιμοποιήστε λειτουργικές μονάδες (διαδικασίες / ενότητες) για να επιβεβαιώσετε την εκτέλεση κρίσιμων ή παρτίδων ενεργειών (δραστηριότητες / λειτουργίες),
  • Παροχή φιλικών προς το χρήστη διεπαφών (φιλικό προς το χρήστη): Με τερματικό (με μενού και χρώματα που χρησιμοποιούν το διάλογο) ή / και με επιφάνεια εργασίας (με Windows που χρησιμοποιούν Zenity και Gxmessage),
  • Συμπεριλάβετε ενότητες καλωσορίσματος και αποχαιρετισμού (μηνύματα) στον χρήστη, εάν είναι απαραίτητο,
  • Συμπεριλάβετε μια μονάδα επαλήθευσης διπλής εκτέλεσης,
  • Εξορθολογισμός του μεγέθους του σεναρίου με Εξωτερικές Λειτουργίες ή / και Ενότητες,
  • Επικαλέστε με σαφή και προφανή τρόπο τις κλήσεις προς άλλους διερμηνείς,
  • Εφαρμόστε οποιαδήποτε άλλη λογική και λογική πρόταση που θεωρείτε απαραίτητη.

Εδώ είναι ένα παράδειγμα α Ενότητα μεταβλητών περιβάλλοντος για ένα σενάριο Shell στο Bash για Linux. Αυτή θα πρέπει να είναι η ενότητα (ενότητα) που περιέχει όλες αυτές τις συγκεκριμένες ή πιθανές μεταβλητές που το Σενάριο κελύφους χρειάζεται ή θα χρειαστεί για την εκτέλεσή του. Προσθέτω προσωπικά τα εξής:


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

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

Σημείωση: Ανάλογα με τις απαιτήσεις ή τις εφαρμογές σας μπορείτε να προσθέσετε την εντολή εντολών εξαγωγή my_variable κάτω από καθεμία από τις προηγούμενες μεταβλητές που δημιουργήθηκαν ή δημιουργήστε και εξαγάγετε τις δικές σας μεταβλητές που δημιουργήθηκαν απευθείας με την εντολή εντολής εξαγωγή my_variable = my_parameters

Αργότερα, σε μελλοντικές αναρτήσεις θα συνεχίσουμε να βλέπουμε ένα παράδειγμα ενότητες (ενότητες) που εκτελούν λειτουργίες όπως:

  • ΔΙΠΛΗ ΜΟΝΑΔΑ ΑΝΙΧΝΕΥΣΗΣ ΕΚΤΕΛΕΣΗΣ
  • ΕΝΟΤΗΤΑ ΒΕΛΤΙΣΤΩΣΗΣ
  • ΕΝΟΤΗΤΑ ΑΔΕΙΑΣ ΧΡΗΣΤΗ ΜΕ Κωδικό πρόσβασης
  • ΕΝΟΤΗΤΑ ΑΝΙΧΝΕΥΣΗΣ ΤΗΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΤΟΥ ΛΕΙΤΟΥΡΓΙΚΟΥ ΣΥΣΤΗΜΑΤΟΣ
  • ΕΝΟΤΗΤΑ ΔΙΑΜΟΡΦΩΣΗΣ ΓΛΩΣΣΑΣ ΚΩΔ
  • ΕΝΟΤΗΤΑ ΔΙΑΜΟΡΦΩΣΗΣ PROXY ΓΙΑ ΤΟ ΠΕΡΙΒΑΛΛΟΝ ΕΚΤΕΛΕΣΗΣ

Μεταξύ πολλών άλλων!

Μπορούν να μάθουν αυτοδίδακτοι σχετικά με τις εντολές: gksu, διάλογος, gxmessage, zenity, espeak, play, μεταξύ πολλών άλλων για τη δημιουργία γραφικών διεπαφών από το τερματικό ή για την επιφάνεια εργασίας του χρήστη, με ηχητικές ειδοποιήσεις ή ειδοποιήσεις πολυμέσωνκαι προωθήστε τη γνώση που θα χρησιμοποιήσουν αργότερα.

Θυμηθείτε ότι αυτές και οποιεσδήποτε άλλες προτάσεις σε ορισμένες ενότητα, συνάρτηση, μεταβλητή, εντολή ή ενέργεια γενικά μπορεί να πραγματοποιηθεί πολλοί τρόποι, και αυτό που φαίνεται εδώ δεν είναι τίποτα περισσότερο από ένα απλός τρόπος, απο πολλούς πιθανούς και πιθανούς τρόπους στο οποίο είπε η δράση μπορεί ή θα μπορούσε να πραγματοποιηθεί!

Ακριβώς για να τελειώσω σε αφήνω, α Screencast από εμένα, για να σας δείξω τι θα μπορούσατε να κάνετε, αφού ολοκληρώσετε αυτό Διαδικτυακό μάθημα Shell Scripting σε DesdeLinux:

LPI-SB8 Test ScreenCast

(LINUX POST INSTALL - BICENTENNIAL SCRIPT 8.0.0) - Μέρος 2


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   ανώνυμος dijo

    Ημερομηνία για τον άνθρωπο:
    echo -e «\ e [1; 32m Ημερομηνία:» $ (ημερομηνία «+% d-% m-% Y») «\ e [1; 32m Ώρα:» $ (ημερομηνία «+% T»)

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

    Όνομα διανομής:
    γάτα / etc / * απελευθέρωση | cut -f2 -d »| κεφαλή -1

    Όνομα κεντρικού υπολογιστή:
    cat / proc / sys / kernel / hostname

    Αρχιτεκτονική OS:
    [[ -x /sbin/init ]] && αρχείο /sbin/init | awk '{print $7}' | tr -d ',' || [[ -x /lib/systemd/systemd ]] && αρχείο /lib/systemd/systemd | awk '{print $7}' | tr -d ',' 2> /dev/null

    Έκδοση πυρήνα:
    cat / proc / sys / kernel / osrelease

  2.   Ινγκ. Jose Albert dijo

    Μου άρεσε πολύ η πρώτη σας συνεισφορά "ημερομηνία για ανθρώπους", καθώς η έξοδος θα ήταν ως παράδειγμα:

    Ημερομηνία: 11-02-2016 Ώρα: 16:04:10

    Ποιο αποτελεσματικό σε ένα παράθυρο διαλόγου, zenity ή gxmessage είναι πολύ εύπεπτο οπτικά!

    Με τη δεύτερη πρότασή σας θα ήθελα να το τοποθετήσω ως εξής:

    εάν ισχύει "uname -s" && cat / proc / sys / kernel / ostype; στη συνέχεια, ηχώ "Επικυρώθηκε το λειτουργικό σύστημα". fi | δίψα 1δ

    Και τέλος, σας ευχαριστώ πολύ για τον εμπλουτισμό των συνεισφορών σας όπως πάντα!