Изградите свој програм корак по корак користећи Схелл Сцриптинг - 2. део

У Део 1 из ове серије се сећамо како да имплементирамо:

А у претходним смо се натопили боље праксе следити приликом стварања одличног Схелл скрипта у Басху за Линук, и врло конкретно у погледу дизајнирања а Схебанг и БСМ (Басх Стрицт Моде / Стрицт Басх Моде).

Најбоље праксе за стварање скрипте љуске у ГНУ / Линук - 1. део

Најбоље праксе за стварање скрипте љуске у ГНУ / Линук - 2. део

Схелл Сцриптинг

У овом посту ћемо видети како применити а Модул променљивих окружења за скрипту љуске у Басх-у за Линук, узимајући за пример један мој програми (апликације) чињенице у а Схелл сцрипт зове Линук Пост Инсталл - Бицентенниал Сцрипт 8.0, али прво мали резиме боље праксе тако да их имате на уму:

  • Увуците свој код,
  • Додајте размаке између одељака кода,
  • Коментирајте што више можете код,
  • Направите променљиве са описним именима њихових функција,
  • Користите синтаксу ВАРИАБЛЕ = $ (наредба) за замену наредбе
  • Користите модуле и / или променљиве: Суперкорисника и Овлашћене провере корисника са или без утврђених лозинки.
  • Користите модуле и / или променљиве за: Валидацију оперативног система (Дистро, Верзија, Архитектура, између осталог),
  • Користите модуле (процедуре / одељци) за потврђивање извршења критичних или групних радњи (активности / функција),
  • Пружање корисничких интерфејса (усерфриендли): преко терминала (са менијима и бојама помоћу дијалога) и / или путем радне површине (са Виндовсом који користи Зенити и Гкмессаге),
  • По потреби укључите модуле добродошлице и опроштаја (поруке) кориснику,
  • Укључите двоструки модул за верификацију,
  • Рационализовати величину скрипте помоћу спољних функција и / или модула,
  • Позовите се на јасан и евидентан начин на позиве другим тумачима,
  • Примените било коју другу логичку и рационалну препоруку коју сматрате потребном.

Ево примера а Модул променљивих окружења за скрипту љуске у Басх-у за Линук. Ово би требало да буде модул (одељак) који садржи све оне одређене или вероватне променљиве које Схелл сцрипт треба или ће требати за његово извршење. Ја лично додајем следеће:


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

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

Напомена: Овисно о вашим захтјевима или имплементацијама, можете додати наредбу наредбе извози ми_вариабле испод сваке од претходних креираних променљивих или креирајте и извезите сопствене променљиве креиране директно помоћу команде цомманд извоз ми_вариабле = ми_параметерс

Касније ћемо у будућим постовима и даље видети пример модули (секције) који обављају функције као што су:

  • Двоструки модул за откривање извршења или неуспешно извршење
  • МОДУЛ ОПТИМИЗАЦИЈЕ
  • МОДУЛ Овлашћења корисника са лозинком
  • МОДУЛ ОТКРИВАЊА АРХИТЕКТУРЕ ОПЕРАТИВНОГ СИСТЕМА
  • КОДИРАЊЕ ЈЕЗИКА КОНФИГУРАЦИОНИ МОДУЛ
  • ПРОФИСИЈСКИ МОДУЛ КОНФИГУРАЦИЈЕ ЗА ИЗВРШНО ОКРУЖЕЊЕ

Између многих других!

Могу да се самоуче о наредбама: гксу, дијалог, гкмессаге, зенити, еспеак, плаи, између многих других за стварање графичких интерфејса помоћу терминала или за радну површину корисника, са звучним или мултимедијалним упозорењима, и унапредити знање које ће касније користити.

Запамтите да ове и било које друге препоруке за неке модул, функција, променљива, команда или радња уопште се може извршити много начина, а оно што је овде приказано није ништа више од а једноставан начин, од много могућих и вероватних начина у којој је рекао акција се може или може извршити!

Само да завршим, остављам те, а Снимак екрана направио ја, да вам покажем за шта бисте били способни, након што ово завршите Схелл Сцриптинг онлајн курс у DesdeLinux:

ЛПИ-СБ8 Тест СцреенЦаст

(ЛИНУКС ПОСТ ИНСТАЛЛАТИОН - СЦРИПТ БИЦЕНТЕНАРИО 8.0.0) - 2. део


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

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.

  1.   безимени дијо

    Датум за људе:
    ецхо -е «\ е [1; 32мДатум:» $ (датум «+% д-% м-% И») «\ е [1; 32м време:» $ (датум «+% Т»)

    Истински „унаме-с“:
    цат / проц / сис / кернел / остипе

    Назив дистрибуције:
    мачка / етц / * релеасе | изрезати -ф2 -д »| глава -1

    Име хоста:
    цат / проц / сис / кернел / хостнаме

    Архитектура ОС:
    [[-к / сбин / инит]] && датотека / сбин / инит | авк '{принт $ 7}' | тр -д ',' || [[-к / либ / системд / системд]] && датотека / либ / системд / системд | авк '{принт $ 7}' | тр -д ',' 2> / дев / нулл

    Верзија језгра:
    цат / проц / сис / кернел / осрелеасе

  2.   Инг. Јосе Алберт дијо

    Заиста ми се свидео ваш први допринос „датум за људе“, јер би резултат био пример:

    Датум: 11-02-2016 Време: 16:04:10

    Што је ефикасно у дијалошком, зенит или гкмессаге прозору врло визуелно сварљиво!

    Уз ваш други предлог хтео бих да га поставим овако:

    ако је тачно „унаме -с“ && цат / проц / сис / кернел / остипе; затим ехо „Оперативни систем потврђен“; фи | жеђ 1д

    И на крају, пуно вам хвала на богатим доприносима као и увек!