В част 1 от тази серия си спомняме как да приложим:
А в предишните се накиснахме по-добри практики да следват при създаването на отличен Shell скрипт в Bash за Linux, и много конкретно по отношение на проектирането на a Shebang и BSM (Bash Strict Mode / Strict Bash Mode).
Най-добри практики за създаване на Shell Script в GNU / Linux - Част 1
Най-добри практики за създаване на Shell Script в GNU / Linux - Част 2
В този пост ще видим как да приложим 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:
(LINUX POST INSTALL - СЦЕНАРТ BICENTENARIO 8.0.0) - Част 2
Дата за хората:
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
Наистина ми хареса първият ви принос "дата за хората", тъй като резултатът ще бъде като пример:
Дата: 11-02-2016 Час: 16:04:10
Което ефективно в диалогов прозорец, зенитност или gxmessage прозорец е много визуално смилаем!
С второто ви предложение бих искал да го поставя така:
ако е вярно "uname -s" && cat / proc / sys / kernel / ostype; след това ехо „Одобрена операционна система“; fi | жажда 1г
И накрая, благодаря ви много за вашия обогатяващ принос както винаги!