สร้างโปรแกรมของคุณทีละขั้นตอนโดยใช้ Shell Scripting - ตอนที่ 2

ใน ตอนที่ 1 จากชุดนี้เราจำได้เกี่ยวกับวิธีใช้:

และก่อนหน้านี้เราแช่ตัวเอง แนวทางปฏิบัติที่ดีกว่า ที่จะปฏิบัติตามเมื่อสร้างที่ยอดเยี่ยม เชลล์สคริปต์ใน Bash สำหรับ Linux และโดยเฉพาะอย่างยิ่งในแง่ของการออกแบบไฟล์ Shebang และ BSM (Bash Strict Mode / Strict Bash Mode)

แนวทางปฏิบัติที่ดีที่สุดในการสร้าง Shell Script ใน GNU / Linux - ตอนที่ 1

แนวทางปฏิบัติที่ดีที่สุดในการสร้าง Shell Script ใน GNU / Linux - ตอนที่ 2

การเขียนสคริปต์เชลล์

ในโพสต์นี้เราจะดูวิธีใช้ไฟล์ โมดูลตัวแปรสภาพแวดล้อมสำหรับเชลล์สคริปต์ใน Bash สำหรับ Linuxโดยยกตัวอย่างหนึ่งในไฟล์ โปรแกรม (แอปพลิเคชัน) ข้อเท็จจริงในก เชลล์สคริปต์ ที่เรียกว่า การติดตั้ง Linux Post - สคริปต์สองร้อยปี 8.0แต่ก่อนอื่นให้สรุปเล็ก ๆ ของไฟล์ แนวทางปฏิบัติที่ดีกว่า เพื่อให้คุณจำไว้:

  • เยื้องรหัสของคุณ
  • เพิ่มช่องว่างระหว่างส่วนของรหัส
  • แสดงความคิดเห็นเกี่ยวกับรหัสให้มากที่สุด
  • สร้างตัวแปรด้วยชื่อที่สื่อความหมายของฟังก์ชัน
  • ใช้ไวยากรณ์ VARIABLE = $ (คำสั่ง) สำหรับการทดแทนคำสั่ง
  • ใช้โมดูลและ / หรือตัวแปรของ: Superuser และ Authorized User Validation โดยมีหรือไม่มีรหัสผ่านที่กำหนด
  • ใช้โมดูลและ / หรือตัวแปรของ: การตรวจสอบความถูกต้องของระบบปฏิบัติการ (Distro, Version, Architecture, และอื่น ๆ ),
  • ใช้โมดูล (ขั้นตอน / ส่วน) เพื่อยืนยันการดำเนินการของการดำเนินการที่สำคัญหรือชุดงาน (กิจกรรม / ฟังก์ชัน)
  • จัดเตรียมอินเทอร์เฟซที่เป็นมิตรกับผู้ใช้ (Userfriendly): โดย Terminal (พร้อมเมนูและสีโดยใช้ Dialog) และ / หรือโดยเดสก์ท็อป (ด้วย Windows ที่ใช้ Zenity และ Gxmessage)
  • รวมโมดูลของการต้อนรับและการอำลา (ข้อความ) ให้กับผู้ใช้หากจำเป็น
  • รวมโมดูลการตรวจสอบการดำเนินการสองครั้ง
  • กำหนดขนาดสคริปต์ให้สมเหตุสมผลด้วยฟังก์ชันภายนอกและ / หรือโมดูล
  • เรียกร้องให้ล่ามคนอื่น ๆ อย่างชัดเจนและชัดเจน
  • ใช้คำแนะนำอื่น ๆ ที่มีเหตุผลและมีเหตุผลที่คุณเห็นว่าจำเป็น

นี่คือตัวอย่างของไฟล์ โมดูลตัวแปรสภาพแวดล้อมสำหรับเชลล์สคริปต์ใน Bash สำหรับ Linux. นี่ควรเป็นโมดูล (ส่วน) ที่มีตัวแปรที่แน่นอนหรือน่าจะเป็นทั้งหมดที่ เชลล์สคริปต์ ต้องการหรือจำเป็นสำหรับการดำเนินการ ฉันเพิ่มสิ่งต่อไปนี้เป็นการส่วนตัว:


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

ต่อไปในโพสต์ในอนาคตเราจะยังคงเห็นตัวอย่างของ โมดูล (ส่วน) ที่ทำหน้าที่เช่น:

  • DOUBLE EXECUTION DETECTION MODULE หรือ FAILED EXECUTION
  • โมดูลการเพิ่มประสิทธิภาพ
  • โมดูลการอนุญาตของผู้ใช้ด้วยรหัสผ่าน
  • โมดูลการตรวจจับสถาปัตยกรรมของระบบปฏิบัติการ
  • โมดูลการกำหนดค่าภาษาการเข้ารหัส
  • โมดูลการกำหนดค่าพร็อกซีสำหรับสภาพแวดล้อมการดำเนินการ

ท่ามกลางคนอื่น ๆ อีกมากมาย!

พวกเขาสามารถเรียนรู้ด้วยตนเองเกี่ยวกับคำสั่งต่างๆ: gksu, โต้ตอบ, gxmessage, zenity, espeak, playและอื่น ๆ อีกมากมาย เพื่อสร้างอินเทอร์เฟซแบบกราฟิกโดย Terminal หรือสำหรับเดสก์ท็อปของผู้ใช้พร้อมการแจ้งเตือนด้วยเสียงหรือมัลติมีเดียและความรู้ล่วงหน้าที่จะใช้ในภายหลัง

โปรดจำไว้ว่าสิ่งเหล่านี้และคำแนะนำอื่น ๆ ในบางส่วน โมดูลฟังก์ชันตัวแปรคำสั่งหรือการกระทำ โดยทั่วไปสามารถทำได้ หลายวิธีและสิ่งที่แสดงต่อไปนี้ไม่มีอะไรมากไปกว่าไฟล์ วิธีง่ายๆของ หลายวิธีที่เป็นไปได้และเป็นไปได้ ซึ่งกล่าวว่า การดำเนินการสามารถดำเนินการได้!

เพียงเพื่อจบฉันปล่อยให้คุณ Screencast สร้างโดยฉันเพื่อแสดงให้คุณเห็นว่าคุณสามารถทำอะไรได้บ้างหลังจากทำสิ่งนี้เสร็จ หลักสูตรออนไลน์ Shell Scripting ใน DesdeLinux:

LPI-SB8 ทดสอบ ScreenCast

(LINUX POST INSTALL - SCRIPT BICENTENARIO 8.0.0) - ส่วนที่ 2


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   นิรนาม dijo

    วันที่สำหรับมนุษย์:
    echo -e « \ e [1; 32mDate: » $ (วันที่« +% d-% m-% Y ») « \ e [1; 32m เวลา: » $ (วันที่« +% T »)

    "uname -s" จริง:
    cat / proc / sys / kernel / ostype

    ชื่อ Distro:
    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.   Jose Albert dijo

    ฉันชอบการมีส่วนร่วมครั้งแรกของคุณ "วันที่สำหรับมนุษย์" เนื่องจากผลลัพธ์จะเป็นตัวอย่าง:

    วันที่: 11-02-2016 เวลา: 16:04:10 น

    ซึ่งอย่างมีประสิทธิภาพในหน้าต่างโต้ตอบ zenity หรือ gxmessage นั้นย่อยง่ายมาก!

    ด้วยคำแนะนำที่สองของคุณฉันต้องการวางไว้ดังนี้:

    ถ้าจริง "uname -s" && cat / proc / sys / kernel / ostype; จากนั้นสะท้อน "ระบบปฏิบัติการตรวจสอบแล้ว"; fi | กระหายน้ำ 1d

    และสุดท้ายขอขอบคุณมากสำหรับการมีส่วนร่วมของคุณเช่นเคย!