Buat program Anda selangkah demi selangkah menggunakan Shell Scripting - Part 2

Dalam Bagian 1 seri ini kita ingat bagaimana mengimplementasikan:

Dan yang sebelumnya, kami membasahi diri kami sendiri praktik yang lebih baik untuk diikuti saat membuat file Skrip shell di Bash untuk Linux, dan secara khusus dalam hal mendesain a Shebang dan BSM (Bash Strict Mode / Strict Bash Mode).

Praktik terbaik untuk membuat Shell Script di GNU / Linux - Bagian 1

Praktik terbaik untuk membuat Shell Script di GNU / Linux - Bagian 2

Shell Scripting

Dalam posting ini kita akan melihat bagaimana mengimplementasikan file Modul Variabel Lingkungan untuk Skrip Shell di Bash untuk Linux, mengambil sebagai contoh salah satu file saya program (aplikasi) fakta di a Skrip shell bernama Linux Post Install - Bicentennial Script 8.0, tetapi pertama-tama ringkasan kecil dari praktik yang lebih baik agar Anda mengingatnya:

  • Indente kode Anda,
  • Tambahkan spasi pemisah antar bagian kode,
  • Beri komentar sebanyak yang Anda bisa pada kode,
  • Buat variabel dengan nama deskriptif fungsinya,
  • Gunakan sintaks VARIABLE = $ (perintah) untuk substitusi perintah
  • Gunakan modul dan / atau variabel dari: Superuser dan Validasi Pengguna Resmi dengan atau tanpa sandi yang dibuat.
  • Menggunakan modul dan / atau variabel dari: Validasi Sistem Operasi (Distro, Versi, Arsitektur, dll.),
  • Gunakan modul (prosedur / bagian) untuk mengonfirmasi pelaksanaan tindakan kritis atau batch (aktivitas / fungsi),
  • Menyediakan Antarmuka yang Ramah Pengguna (Userfriendly): Dengan Terminal (dengan Menu dan Warna menggunakan Dialog) dan / atau Dengan Desktop (dengan Windows menggunakan Zenity dan Gxmessage),
  • Sertakan modul Selamat Datang dan Perpisahan (pesan) kepada pengguna, jika perlu,
  • Sertakan modul verifikasi proses ganda,
  • Rasionalisasi ukuran skrip dengan Fungsi dan / atau Modul Eksternal,
  • Panggil dengan cara yang jelas dan jelas panggilan ke Penerjemah lain,
  • Terapkan rekomendasi logis dan rasional lainnya yang Anda anggap perlu.

Berikut adalah contoh dari a Modul Variabel Lingkungan untuk Skrip Shell di Bash untuk Linux. Ini harus menjadi modul (bagian) yang berisi semua variabel tertentu atau kemungkinan yang Skrip shell membutuhkan atau akan membutuhkan pelaksanaannya. Saya pribadi menambahkan yang berikut ini:


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

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

Catatan: Bergantung pada persyaratan atau implementasi Anda, Anda dapat menambahkan perintah perintah ekspor my_variable di bawah masing-masing variabel sebelumnya dibuat atau buat dan ekspor variabel Anda sendiri yang dibuat langsung dengan perintah perintah ekspor my_variable = my_parameters

Nanti di postingan selanjutnya kita akan terus melihat contohnya modul (bagian) yang menjalankan fungsi seperti:

  • MODUL DETEKSI PELAKSANAAN GAGAL atau PELAKSANAAN GAGAL
  • MODUL OPTIMASI
  • MODUL OTORISASI PENGGUNA DENGAN PASSWORD
  • MODUL DETEKSI ARSITEKTUR SISTEM OPERASI
  • MODUL KONFIGURASI BAHASA KODE
  • MODUL KONFIGURASI PROXY UNTUK LINGKUNGAN PELAKSANAAN

Di antara banyak lainnya!

Mereka bisa belajar secara otodidak tentang perintah: gksu, dialog, gxmessage, zenity, espeak, mainkan, di antara banyak lainnya untuk membuat antarmuka grafis dengan Terminal atau untuk Desktop Pengguna, dengan peringatan sonik atau multimedia, dan memajukan pengetahuan yang akan mereka gunakan nanti.

Ingatlah bahwa ini dan rekomendasi lainnya tentang beberapa modul, fungsi, variabel, perintah atau tindakan secara umum itu bisa dilakukan banyak jalan, dan apa yang ditampilkan di sini tidak lebih dari a cara sederhana, dari banyak cara yang mungkin dan mungkin di mana kata tindakan bisa atau bisa dilakukan!

Hanya untuk menyelesaikannya aku meninggalkanmu, a Screencast dibuat oleh saya, untuk menunjukkan kepada Anda apa yang mampu Anda lakukan, setelah menyelesaikan ini Kursus online Shell Scripting di DesdeLinux:

ScreenCast Uji LPI-SB8

(LINUX POST INSTALL - BICENTENNIAL SCRIPT 8.0.0) - Bagian 2


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   tanpa nama dijo

    Tanggal untuk manusia:
    echo -e «\ e [1; 32mTanggal:» $ (tanggal «+% d-% m-% Y») «\ e [1; 32m Waktu:» $ (tanggal «+% T»)

    Benar "uname -s":
    cat / proc / sys / kernel / ostype

    Nama distro:
    cat / etc / * release | potong -f2 -d »| kepala -1

    Nama Host:
    cat / proc / sys / kernel / hostname

    Arsitektur OS:
    [[-x / sbin / init]] && file / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && file / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null

    Versi Kernel:
    cat / proc / sys / kernel / osrelease

  2.   Ing.José Albert dijo

    Saya sangat menyukai kontribusi pertama Anda "tanggal untuk manusia" karena hasilnya adalah sebagai contoh:

    Tanggal: 11-02-2016 Waktu: 16:04:10

    Yang secara efektif dalam jendela dialog, zenity atau gxmessage sangat dapat dicerna secara visual!

    Dengan saran kedua Anda, saya ingin menempatkannya seperti ini:

    jika benar "uname -s" && cat / proc / sys / kernel / ostype; lalu gema "Sistem operasi divalidasi"; fi | haus 1d

    Dan terakhir, terima kasih banyak atas kontribusi Anda yang memperkaya seperti biasa!