使用Shell腳本逐步構建程序-第2部分

第1部分 在本系列文章中,我們記得如何實現:

在以前的那些中,我們浸透了自己 更好的做法 創建優秀作品時要遵循 Bash for Linux中的Shell腳本, 特別是在設計 Shebang和BSM(嚴格Bash模式/嚴格Bash模式)。

在GNU / Linux中創建Shell腳本的最佳實踐-第1部分

在GNU / Linux中創建Shell腳本的最佳實踐-第2部分

Shell Scripting

在這篇文章中,我們將看到如何實現 適用於Linux的Bash中Shell腳本的環境變量模塊,以我的一個 程序(應用程序) 事實 Shell腳本Linux安裝後-Bicentennial Script 8.0,但首先是 更好的做法 這樣您就可以記住它們:

  • 縮進您的代碼,
  • 在代碼段之間添加空格,
  • 盡你所能對代碼進行註釋,
  • 使用其功能的描述性名稱創建變量,
  • 使用語法VARIABLE = $(命令)進行命令替換
  • 使用以下模塊和/或變量:具有或不具有已建立密碼的超級用戶和授權用戶驗證。
  • 使用以下模塊和/或變量:操作系統驗證(發行版,版本,體系結構等),
  • 使用模塊(程序/部分)來確認關鍵或批處理操作(活動/功能)的執行情況,
  • 提供用戶友好的界面(用戶友好):通過終端(通過使用對話框的菜單和顏色)和/或通過桌面(通過使用Zenity和Gxmessage的Windows),
  • 如有必要,向用戶包括歡迎和告別(消息)模塊,
  • 包括雙重驗證模塊,
  • 使用外部函數和/或模塊合理化腳本大小,
  • 以清晰明顯的方式調用對其他口譯員的呼叫,
  • 應用您認為必要的任何其他邏輯和理性建議。

這是一個例子 適用於Linux的Bash中Shell腳本的環境變量模塊。 這應該是包含所有那些特定的或可能的變量的模塊(部分), 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
###############################################################################

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

注意: 根據您的要求或實現,您可以添加命令command 導出my_variable 在每個先前創建的變量下面,或者直接使用命令command創建和導出自己創建的變量 導出my_variable = my_parameters

稍後,在以後的文章中,我們將繼續看到以下示例 模塊(部分) 執行以下功能:

  • 雙執行檢測模塊或執行失敗
  • 優化模塊
  • 帶有密碼的用戶授權模塊
  • 檢測操作系統體系結構的模塊
  • 編碼語言配置模塊
  • 執行環境的代理配置模塊

除其他外!

他們可以自學有關命令: gksu,對話,gxmessage,zenity,espeak,播放等等 通過終端或用戶桌面創建圖形界面,並帶有聲音或多媒體警報,並提高知識,供以後使用。

請記住,這些以及其他一些建議 模塊,功能,變量,命令或動作 通常可以進行 很多種方法,這裡顯示的只是一個 簡單的方法許多可能和可能的方式 在其中說 可以或可以採取行動!

為了結束我離開你, 我進行的截屏完成後,向您展示您的能力 Shell 腳本線上課程 DesdeLinux:

LPI-SB8測試ScreenCast

(LINUX POST安裝-百年紀念腳本8.0.0)-第2部分


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   無名 他說:

    人類的日期:
    echo -e«\ e [1; 32mDate:»$(日期«+%d-%m-%Y»)«\ e [1; 32m時間:»$(日期«+%T»)

    真實的“ uname -s”:
    cat / proc / sys /內核/ ostype

    發行版名稱:
    貓/等/ *發布| 切-f2 -d»| 頭-1

    主機名:
    cat / proc / sys /內核/主機名

    操作系統架構:
    [[-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 /內核/ osrelease

  2.   Ing。Jose Albert 他說:

    我非常喜歡您的第一個貢獻“人類的約會”,因為輸出將作為示例:

    日期:11年02月2016日時間:16:04:10

    在對話框,zenity或gxmessage窗口中,哪個在視覺上很容易消化!

    關於您的第二個建議,我想這樣放置:

    如果為true,則“ uname -s” && cat / proc / sys / kernel / ostype; 然後回顯“操作系統已驗證”; fi | 口渴1天

    最後,非常感謝您一如既往的豐富貢獻!