Изградете вашата програма стъпка по стъпка, като използвате Shell Scripting - Част 2

В част 1 от тази серия си спомняме как да приложим:

А в предишните се накиснахме по-добри практики да следват при създаването на отличен Shell скрипт в Bash за Linux, и много конкретно по отношение на проектирането на a Shebang и BSM (Bash Strict Mode / Strict Bash Mode).

Най-добри практики за създаване на Shell Script в GNU / Linux - Част 1

Най-добри практики за създаване на Shell Script в GNU / Linux - Част 2

Скрипт на Shell

В този пост ще видим как да приложим a Модул за променливи на околната среда за Shell Script в Bash за Linux, като вземем за пример един от моите програми (приложения) факти в a Shell сценарий наречен Инсталиране на Linux след двегодишен скрипт 8.0, но първо малко резюме на по-добри практики за да ги имате предвид:

  • Въведете кода си,
  • Добавете разделителни интервали между раздели на кода,
  • Коментирайте колкото можете по кода,
  • Създайте променливи с описателни имена на техните функции,
  • Използвайте синтаксиса VARIABLE = $ (команда) за заместване на команда
  • Използвайте модули и / или променливи на: Суперпотребител и Упълномощено потвърждение на потребителя със или без установени пароли.
  • Използвайте модули и / или променливи на: Проверка на операционната система (Distro, версия, архитектура, наред с други.),
  • Използвайте модули (процедури / раздели), за да потвърдите изпълнението на критични или групови действия (дейности / функции),
  • Осигурете удобни за потребителя интерфейси (удобни за потребителя): чрез терминал (с менюта и цветове, използващи диалогов прозорец) и / или чрез работен плот (с Windows, използващи Zenity и Gxmessage),
  • Включете модули на Добре дошли и Сбогом (съобщения) на потребителя, ако е необходимо,
  • Включете двукратен модул за проверка,
  • Рационализирайте размера на скрипта с външни функции и / или модули,
  • Призовавайте по ясен и очевиден начин обажданията до други преводачи,
  • Приложете всяка друга логична и рационална препоръка, която считате за необходима.

Ето пример за Модул за променливи на околната среда за Shell Script в Bash за Linux. Това трябва да бъде модулът (раздел), който съдържа всички онези определени или вероятни променливи, които Shell сценарий се нуждае или ще се нуждае от неговото изпълнение. Аз лично добавям следното:


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

По-късно, в бъдещи публикации ще продължим да виждаме пример за модули (раздели) които изпълняват функции като:

  • ДВОЙНО МОДУЛ ЗА ОТКРИВАНЕ НА ИЗПЪЛНЕНИЕ или НЕУСПЕШНО ИЗПЪЛНЕНИЕ
  • ОПТИМИЗАЦИОНЕН МОДУЛ
  • МОДУЛ ЗА РАЗРЕШЕНИЕ НА ПОТРЕБИТЕЛ С ПАРОЛА
  • МОДУЛ ЗА ОТКРИВАНЕ НА АРХИТЕКТУРАТА НА ОПЕРАТИВНАТА СИСТЕМА
  • МОДУЛ ЗА КОДИРАНЕ НА ЕЗИК
  • МОДУЛ ЗА КОНФИГУРАЦИЯ НА ПРОКСИ ЗА ОКОЛНАТА СРЕДА

Сред много други!

Те могат да се самоучат за командите: gksu, диалог, gxmessage, zenity, espeak, play, наред с много други за създаване на графични интерфейси от терминала или за работния плот на потребителя, със звукови или мултимедийни предупрежденияи усъвършенстват знанията, които ще използват по-късно.

Не забравяйте, че тези и всякакви други препоръки за някои модул, функция, променлива, команда или действие като цяло може да се извърши много начини, а показаното тук е само едно прост начин, от много възможни и вероятни начини в която каза действие може или може да бъде извършено!

За да завърша, те оставям, а Скрийнкаст, направен от мен, за да ви покажа на какво бихте били способни, след като завършите това Онлайн курс по Shell Scripting в DesdeLinux:

LPI-SB8 Тестов екран

(LINUX POST INSTALL - СЦЕНАРТ BICENTENARIO 8.0.0) - Част 2


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   безименен каза той

    Дата за хората:
    echo -e «\ e [1; 32mDate:» $ (дата «+% d-% m-% Y») «\ e [1; 32m Време:» $ (дата «+% T»)

    Истински "uname -s":
    cat / proc / sys / kernel / ostype

    Име на дистрибуцията:
    cat / etc / * release | изрязване -f2 -d »| глава -1

    Име на хост:
    cat / proc / sys / kernel / hostname

    Архитектура на ОС:
    [[-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.   Инж. Хосе Алберт каза той

    Наистина ми хареса първият ви принос "дата за хората", тъй като резултатът ще бъде като пример:

    Дата: 11-02-2016 Час: 16:04:10

    Което ефективно в диалогов прозорец, зенитност или gxmessage прозорец е много визуално смилаем!

    С второто ви предложение бих искал да го поставя така:

    ако е вярно "uname -s" && cat / proc / sys / kernel / ostype; след това ехо „Одобрена операционна система“; fi | жажда 1г

    И накрая, благодаря ви много за вашия обогатяващ принос както винаги!