Xây dựng chương trình của bạn từng bước bằng cách sử dụng Shell Scripting - Phần 2

Trong phần 1 từ loạt bài này, chúng tôi nhớ về cách triển khai:

Và trong những lần trước, chúng tôi tự ngâm mình thực hành tốt hơn để làm theo khi tạo ra một Tập lệnh Shell trong Bash dành cho Linux, và rất cụ thể về mặt thiết kế Shebang và BSM (Chế độ Bash nghiêm ngặt / Chế độ Bash nghiêm ngặt).

Các phương pháp hay nhất để tạo Shell Script trong GNU / Linux - Phần 1

Các phương pháp hay nhất để tạo Shell Script trong GNU / Linux - Phần 2

Shell Scripting

Trong bài đăng này, chúng ta sẽ xem cách triển khai Mô-đun biến môi trường cho tập lệnh Shell trong Bash cho Linux, lấy làm ví dụ một trong những chương trình (ứng dụng) sự thật trong một Tập lệnh shell gọi Cài đặt bài đăng trên Linux - Bicentennial Script 8.0, nhưng trước tiên là một bản tóm tắt nhỏ về thực hành tốt hơn để bạn ghi nhớ chúng:

  • Thụt lề mã của bạn,
  • Thêm khoảng trắng ngăn cách giữa các phần mã,
  • Bình luận nhiều nhất có thể về mã,
  • Tạo các biến với tên mô tả các hàm của chúng,
  • Sử dụng cú pháp VARIABLE = $ (lệnh) để thay thế lệnh
  • Sử dụng các mô-đun và / hoặc các biến của: Superuser và Authorized User Validation có hoặc không có mật khẩu đã thiết lập.
  • Sử dụng các mô-đun và / hoặc các biến của: Xác thực Hệ điều hành (Phân phối, Phiên bản, Kiến trúc, v.v.),
  • Sử dụng các mô-đun (thủ tục / phần) để xác nhận việc thực hiện các hành động quan trọng hoặc hàng loạt (hoạt động / chức năng),
  • Cung cấp Giao diện Thân thiện với Người dùng (Thân thiện với Người dùng): Bằng Thiết bị đầu cuối (với Menu và Màu sử dụng Hộp thoại) và / hoặc Bằng Máy tính để bàn (với Windows sử dụng Zenity và Gxmessage),
  • Bao gồm các mô-đun Chào mừng và Chia tay (tin nhắn) cho người dùng, nếu cần,
  • Bao gồm một mô-đun xác minh chạy hai lần,
  • Hợp lý hóa kích thước tập lệnh với Các chức năng bên ngoài và / hoặc Mô-đun,
  • Gọi một cách rõ ràng và hiển nhiên các cuộc gọi đến các Phiên dịch viên khác,
  • Áp dụng bất kỳ khuyến nghị hợp lý và hợp lý nào khác mà bạn cho là cần thiết.

Đây là một ví dụ về Mô-đun biến môi trường cho tập lệnh Shell trong Bash cho Linux. Đây phải là mô-đun (phần) chứa tất cả các biến nhất định hoặc có thể xảy ra mà Tập lệnh shell cần hoặc sẽ cần để thực hiện nó. Cá nhân tôi thêm những điều sau:


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

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

Lưu ý: Tùy thuộc vào yêu cầu hoặc triển khai của bạn, bạn có thể thêm lệnh lệnh xuất my_variable bên dưới mỗi biến trước đó đã tạo hoặc tạo và xuất các biến của riêng bạn được tạo trực tiếp bằng lệnh command export my_variable = my_parameters

Sau đó, trong các bài viết tới, chúng ta sẽ tiếp tục xem một ví dụ về mô-đun (phần) thực hiện các chức năng như:

  • MODULE PHÁT HIỆN THI CÔNG ĐÔI hoặc THI CÔNG THẤT BẠI
  • MÔ ĐUN TỐI ƯU
  • MODULE ỦY QUYỀN NGƯỜI DÙNG VỚI MẬT KHẨU
  • MÔ HÌNH PHÁT HIỆN KIẾN TRÚC HỆ THỐNG VẬN HÀNH
  • MÔ ĐUN CẤU HÌNH NGÔN NGỮ MÃ
  • MÔ ĐUN CẤU HÌNH PROXY CHO MÔI TRƯỜNG THI CÔNG

Trong số nhiều người khác!

Họ có thể tự học về các lệnh: gksu, hộp thoại, gxmessage, zenity, espeak, play, trong số nhiều người khác để tạo giao diện đồ họa bằng Thiết bị đầu cuối hoặc cho Màn hình của người dùng, với các cảnh báo âm thanh hoặc đa phương tiện, và nâng cao kiến ​​thức mà họ sẽ sử dụng sau này.

Hãy nhớ rằng những điều này và bất kỳ đề xuất nào khác về một số mô-đun, hàm, biến, lệnh hoặc hành động nói chung nó có thể được thực hiện nhiều cáchvà những gì được hiển thị ở đây không gì khác ngoài một cách đơn giản, sau đó nhiều cách khả thi và có thể xảy ra trong đó nói hành động có thể hoặc có thể được thực hiện!

Chỉ để kết thúc tôi rời xa bạn, một Screencast do tôi thực hiện, để cho bạn thấy bạn sẽ có khả năng gì sau khi hoàn thành Khóa học trực tuyến Shell Scripting tại DesdeLinux:

Màn hình thử nghiệm LPI-SB8

(CÀI ĐẶT LINUX POST - SCRIPT BICENTENARIO 8.0.0) - Phần 2


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   không tên dijo

    Ngày dành cho con người:
    echo -e «\ e [1; 32m Ngày:» $ (ngày «+% d-% m-% Y») «\ e [1; 32 phút Thời gian:» $ (ngày «+% T»)

    Đúng "uname -s":
    cat / proc / sys / kernel / ostype

    Tên phân khu:
    cat / etc / * phát hành | cắt -f2 -d »| đầu -1

    Tên máy chủ:
    cat / proc / sys / kernel / hostname

    Kiến trúc hệ điều hành:
    [[-x / sbin / init]] && file / sbin / init | awk '{in $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && file / lib / systemd / systemd | awk '{in $ 7}' | tr -d ',' 2> / dev / null

    Phiên bản hạt nhân:
    cat / proc / sys / kernel / osrelease

  2.   Jose Albert dijo

    Tôi thực sự thích đóng góp đầu tiên của bạn "ngày dành cho con người" vì đầu ra sẽ là một ví dụ:

    Ngày: 11-02-2016 Thời gian: 16:04:10

    Mà hiệu quả trong một hộp thoại, cửa sổ zenity hoặc gxmessage rất dễ tiêu hóa trực quan!

    Với gợi ý thứ hai của bạn, tôi muốn đặt nó như thế này:

    nếu đúng "uname -s" && cat / proc / sys / kernel / ostype; sau đó echo "Hệ điều hành đã được xác thực"; fi | khát 1 ngày

    Và cuối cùng, cảm ơn bạn rất nhiều vì những đóng góp phong phú của bạn như mọi khi!