Buuin ang iyong programa nang sunud-sunod gamit ang Shell Scripting - Bahagi 2

Sa bahagi 1 mula sa seryeng ito naaalala namin ang tungkol sa kung paano ipatupad ang isang:

At sa mga nauna, binabad namin ang ating sarili mas mahusay na kasanayan upang sundin kapag lumilikha ng isang mahusay Shell script sa Bash para sa Linux, at napaka partikular sa mga tuntunin ng pagdidisenyo ng a Shebang at isang BSM (Bash Strict Mode / Strict Bash Mode).

Pinakamahusay na kasanayan upang lumikha ng isang Shell Script sa GNU / Linux - Bahagi 1

Pinakamahusay na kasanayan upang lumikha ng isang Shell Script sa GNU / Linux - Bahagi 2

Scripting ng Shell

Sa post na ito makikita natin kung paano ipatupad ang a Module ng Mga variable ng Kapaligiran para sa isang Shell Script sa Bash para sa Linux, pagkuha bilang isang halimbawa ng isa sa aking mga programa (aplikasyon) katotohanan sa a Shell script tinatawag na Pag-install ng Linux Post - Bicentennial Script 8.0, ngunit unang isang maliit na buod ng mas mahusay na kasanayan upang maisip mo ang mga ito:

  • Kilalanin ang iyong code,
  • Magdagdag ng mga hiwalay na puwang sa pagitan ng mga seksyon ng code,
  • Magkomento hangga't maaari sa code,
  • Lumikha ng mga variable na may naglalarawang pangalan ng kanilang mga pagpapaandar,
  • Gamitin ang syntax VARIABLE = $ (utos) para sa pagpapalit ng utos
  • Gumamit ng mga modyul at / o mga variable ng: Superuser at Awtorisadong Pagpapatunay ng User na mayroon o walang itinatag na mga password.
  • Gumamit ng mga module at / o mga variable ng: Pagpapatunay ng Operating System (Distro, Bersyon, Arkitektura, bukod sa iba pa.),
  • Gumamit ng mga module (pamamaraan / seksyon) upang kumpirmahin ang pagpapatupad ng mga kritikal o batch na aksyon (mga aktibidad / pagpapaandar),
  • Magbigay ng Mga User Friendly Interfaces (Userfriendly): Sa pamamagitan ng Terminal (na may Mga Menu at Kulay gamit ang Dialog) at / o Sa pamamagitan ng Desktop (na may Windows gamit ang Zenity at Gxmessage),
  • Magsama ng mga modyul ng Maligayang Pagdating at Paalam (mga mensahe) sa gumagamit, kung kinakailangan,
  • Magsama ng isang module ng pagpapatotoo ng dobleng pagpapatupad,
  • I-rationalize ang laki ng script sa Mga Panlabas na Pag-andar at / o Mga Modyul,
  • Humingi sa isang malinaw at maliwanag na paraan ng mga tawag sa iba pang Mga Interpreter,
  • Mag-apply ng anumang iba pang lohikal at makatuwirang rekomendasyon na itinuturing mong kinakailangan.

Narito ang isang halimbawa ng a Module ng Mga variable ng Kapaligiran para sa isang Shell Script sa Bash para sa Linux. Ito ay dapat na ang module (seksyon) na naglalaman ng lahat ng mga tiyak o maaaring pagbabago na Shell script pangangailangan o kakailanganin para sa pagpapatupad nito. Personal kong idinagdag ang sumusunod:


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

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

Tandaan: Nakasalalay sa iyong mga kinakailangan o pagpapatupad maaari kang magdagdag ng utos ng utos i-export ang aking_variable sa ibaba ng bawat nakaraang mga variable na nilikha o lumikha at i-export ang iyong sariling mga variable na direktang nilikha gamit ang command command i-export ang my_variable = my_parameter

Sa paglaon, sa mga susunod na post ay magpapatuloy kaming makakakita ng isang halimbawa ng mga module (mga seksyon) na gumaganap ng mga pag-andar tulad ng:

  • DOUBLE EXECUTION DETECTION MODULE o FAILED EXECUTION
  • MODYUL NG OPTIMIZATION
  • Modyul ng Awtorisasyon ng Gumagamit na MAY PASSWORD
  • MODYUL NG PAGKAKITA NG ARCHITECTURE NG OPERATING SYSTEM
  • MODYUL NG PAG-CODING NG WIKA NG CODING
  • MODYUL NG PROFY CONFIGURATION PARA SA ENGLITAD NG EKECOYON

Kabilang sa marami pang iba!

Maaari silang magturo ng sarili tungkol sa mga utos: gksu, dayalogo, gxmessage, zenity, espeak, play, bukod sa marami pang iba upang lumikha ng mga grapikong interface ng Terminal o para sa User Desktop, na may mga sonik o multimedia na alerto, at isulong ang kaalamang gagamitin nila sa paglaon.

Tandaan na ang mga ito at anumang iba pang mga rekomendasyon sa ilan module, pagpapaandar, variable, utos o pagkilos sa pangkalahatan maaari itong isagawa Maraming paraan, at ang ipinakita dito ay iisa lamang simpleng paraan, ng maraming posible at maaaring paraan kung saan sinabi maaring maisagawa ang pagkilos!

Para matapos ko lang iwan kita, a Screencast na ginawa ko, upang maipakita sa iyo kung ano ang iyong kaya, matapos itong matapos Shell Scripting online na kurso sa DesdeLinux:

Screen ng Pagsubok sa LPI-SB8

(LINUX POST INSTALL - BICENTENNIAL SCRIPT 8.0.0) - Bahagi 2


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   walang pangalan dijo

    Petsa para sa mga tao:
    echo -e «\ e [1; 32mDate:» $ (petsa «+% d-% m-% Y») «\ e [1; 32m Oras:» $ (petsa «+% T»)

    Tunay na "uname -s":
    pusa / proc / sys / kernel / ostype

    Pangalan ng Distro:
    cat / etc / * pakawalan | putulin -f2 -d »| ulo -1

    Hostname:
    cat / proc / sys / kernel / hostname

    Arkitektura ng OS:
    [[-x / sbin / init]] && file / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && file / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null

    Bersyon ng Kernel:
    pusa / proc / sys / kernel / osrelease

  2.   Ing.Jose Albert dijo

    Talagang nagustuhan ko ang iyong unang kontribusyon na "petsa para sa mga tao" dahil ang output ay magiging isang halimbawa:

    Petsa: 11-02-2016 Oras: 16:04:10

    Aling mabisa sa isang dialog, window ng zenity o gxmessage ay napaka-digestive ng biswal!

    Sa iyong pangalawang mungkahi nais kong ilagay ito tulad nito:

    kung totoong "uname -s" && cat / proc / sys / kernel / ostype; pagkatapos ay i-echo ang "Operating system validated"; fi | uhaw 1d

    At sa wakas, maraming salamat sa iyong nagpapayaman na mga kontribusyon tulad ng lagi!