Jo 1 daļa šīs sērijas laikā mēs atceramies, kā ieviest:
Un iepriekšējos mēs iemērcām sevi labāka prakse kas jāievēro, veidojot izcilu Shell skripts Bash operētājsistēmai Linux, un ļoti konkrēti attiecībā uz a projektēšanu Shebang un BSM (Bash Strict Mode / Strict Bash Mode).
Labākā prakse, lai izveidotu čaulas skriptu GNU / Linux - 1. daļa
Labākā prakse, lai izveidotu čaulas skriptu GNU / Linux - 2. daļa
Šajā amatā mēs redzēsim, kā ieviest a Vides mainīgo modulis čaulas skriptam Bash for Linux, ņemot par piemēru vienu no maniem programmas (lietojumprogrammas) fakti a Shell skripts sauc Linux Post Install - divgadu skripts 8.0, bet vispirms neliels labāka prakse lai jūs tos paturētu prātā:
- Indente savu kodu,
- Pievienojiet atstarpes starp koda sekcijām,
- Komentējiet kodu, cik vien iespējams,
- Izveidot mainīgos ar aprakstošiem to funkciju nosaukumiem,
- Komandas aizstāšanai izmantojiet sintaksi VARIABLE = $ (komanda)
- Izmantojiet moduļus un / vai mainīgos: Superuser un Authorized User Validation ar vai bez noteiktām parolēm.
- Izmantojiet moduļus un / vai mainīgos: Operētājsistēmas apstiprināšana (cita starpā Distro, Version, Architecture.)
- Izmantojiet moduļus (procedūras / sadaļas), lai apstiprinātu kritisko vai sērijveida darbību (darbību / funkciju) izpildi,
- Nodrošiniet lietotājam draudzīgas saskarnes (lietotājam draudzīgas): pēc termināļa (ar izvēlnēm un krāsām, izmantojot dialogu) un / vai ar darbvirsmu (ar Windows, izmantojot Zenity un Gxmessage),
- Ja nepieciešams, iekļaujiet lietotājam modificēšanas un atvadīšanās moduļus (ziņojumus),
- Iekļaujiet dubultu izpildes verifikācijas moduli,
- Racionalizējiet skripta lielumu, izmantojot ārējās funkcijas un / vai moduļus,
- Skaidri un nepārprotami izsaukt zvanus citiem tulkiem,
- Izmantojiet jebkuru citu loģisku un racionālu ieteikumu, ko uzskatāt par nepieciešamu.
Šeit ir piemērs Vides mainīgo modulis čaulas skriptam Bash for Linux. Tam jābūt modulim (sadaļai), kas satur visus tos noteiktos vai iespējamos mainīgos, kurus Shell skripts vajadzīgas vai būs vajadzīgas tā izpildei. Es personīgi pievienoju sekojošo:
###############################################################################
# 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
###############################################################################
===============
Piezīme: Atkarībā no jūsu prasībām vai ieviešanas jūs varat pievienot komandu komandu eksportēt my_variable zem katra no iepriekšējiem izveidotajiem mainīgajiem vai izveidojiet un eksportējiet savus mainīgos, kas izveidoti tieši ar komandu komandu eksportēt my_variable = my_parameters
Vēlāk nākamajos ierakstos mēs turpināsim redzēt piemēru moduļi (sadaļas) kas veic tādas funkcijas kā:
- DUBULTU IZPILDES NOTEIKŠANAS MODULIS vai Neveiksmīga izpilde
- OPTIMIZĀCIJAS MODULIS
- LIETOTĀJA ATĻAUJAS MODULIS AR PAROLI
- DARBĪBAS SISTĒMAS ARHITEKTŪRAS NOTEIKŠANAS MODULIS
- KODĒŠANAS VALODAS KONFIGURĀCIJAS MODULIS
- PIEVIENOŠANĀS VIDES KONFIGURĀCIJAS MODULIS
Starp daudziem citiem!
Viņi var pašmācīties par komandām: gksu, dialogs, gxmessage, zenity, espeak, play, starp daudziem citiem lai izveidotu grafiskas saskarnes, izmantojot Terminal vai Lietotāja darbvirsmu, ar skaņas vai multivides brīdinājumiemun apgūstiet zināšanas, kuras viņi izmantos vēlāk.
Atcerieties, ka šie un citi ieteikumi dažiem modulis, funkcija, mainīgais, komanda vai darbība kopumā to var izpildīt daudzos veidos, un šeit redzamais ir tikai viens vienkāršs veids, no daudzi iespējamie un iespējamie veidi kurā teica darbību var vai varētu veikt!
Lai pabeigtu, es tevi atstāju, a Manis izveidota ekrāna pārraide, lai parādītu, uz ko tu būtu spējīgs, pabeidzis šo darbu Shell skriptēšanas tiešsaistes kurss DesdeLinux:
(LINUX POST INSTALL - BICENTENNIAL SCRIPT 8.0.0) - 2. daļa
Datums cilvēkiem:
echo -e «\ e [1; 32mDatums:» $ (datums «+% d-% m-% Y») «\ e [1; 32m Laiks:» $ (datums «+% T»)
Patiesie "uname -s":
cat / proc / sys / kodols / ostype
Distro nosaukums:
kaķis / etc / * atbrīvošana | griezt -f2 -d »| galva -1
Saimnieka nosaukums:
kaķis / proc / sys / kodols / resursdatora nosaukums
OS arhitektūra:
[[-x / sbin / init]] && fails / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && fails / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null
Kodola versija:
cat / proc / sys / kodols / osrelease
Man ļoti patika jūsu pirmais ieguldījums "datums cilvēkiem", jo rezultāts būtu kā piemērs:
Datums: 11. Laiks: 02:2016:16
Kas efektīvi dialogā, zenity vai gxmessage logā ir ļoti vizuāli sagremojams!
Ar jūsu otro ieteikumu es vēlētos to ievietot šādi:
ja patiess "uname -s" && cat / proc / sys / kernel / ostype; tad atbalss "Operētājsistēma ir validēta"; fi | slāpes 1d
Un visbeidzot, liels paldies par jūsu bagātinošo ieguldījumu kā vienmēr!