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
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:
(CÀI ĐẶT LINUX POST - SCRIPT BICENTENARIO 8.0.0) - Phần 2
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
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!