Bangun program anda langkah demi langkah menggunakan Shell Scripting - Bahagian 2

Dalam yang 1 dari siri ini kita ingat tentang bagaimana melaksanakan:

Dan yang sebelumnya, kita membasahi diri amalan yang lebih baik untuk diikuti semasa mencipta yang cemerlang Skrip shell di Bash untuk Linux, dan sangat khusus dari segi merancang a Shebang dan BSM (Mode Strict Bash / Strict Bash Mode)

Amalan terbaik untuk membuat Skrip Shell di GNU / Linux - Bahagian 1

Amalan terbaik untuk membuat Skrip Shell di GNU / Linux - Bahagian 2

Shell Scripting

Dalam catatan ini kita akan melihat bagaimana melaksanakan a Modul Pemboleh ubah Persekitaran untuk Skrip Shell di Bash untuk Linux, mengambil sebagai contoh salah satu daripada saya program (aplikasi) fakta dalam a Skrip shell dipanggil Pemasangan Pasca Linux - Skrip Bicentennial 8.0, tetapi pertama ringkasan kecil dari amalan yang lebih baik supaya anda ingat:

  • Masukkan kod anda,
  • Tambahkan ruang pemisah antara bahagian kod,
  • Komen sebanyak mungkin pada kod tersebut,
  • Buat pemboleh ubah dengan nama deskriptif fungsinya,
  • Gunakan sintaks VARIABLE = $ (perintah) untuk penggantian perintah
  • Gunakan modul dan / atau pemboleh ubah: Pengesahan Pengguna Superuser dan Sah dengan atau tanpa kata laluan yang ditetapkan.
  • Gunakan modul dan / atau pemboleh ubah: Pengesahan Sistem Operasi (Distro, Versi, Senibina, antara lain.),
  • Gunakan modul (prosedur / bahagian) untuk mengesahkan pelaksanaan tindakan kritikal atau kumpulan (aktiviti / fungsi),
  • Sediakan Antaramuka yang Mesra Pengguna (Mesra Pengguna): Dengan Terminal (dengan Menu dan Warna menggunakan Dialog) dan / atau Dengan Desktop (dengan Windows menggunakan Zenity dan Gxmessage),
  • Sertakan modul Selamat Datang dan Perpisahan (mesej) kepada pengguna, jika perlu,
  • Sertakan modul pengesahan dua kali ganda,
  • Rasionalkan ukuran skrip dengan Fungsi Luaran dan / atau Modul,
  • Memohon dengan cara yang jelas dan jelas panggilan kepada Jurubahasa lain,
  • Gunakan cadangan logik dan rasional lain yang anda anggap perlu.

Berikut adalah contoh a Modul Pemboleh ubah Persekitaran untuk Skrip Shell di Bash untuk Linux. Ini harus menjadi modul (bahagian) yang mengandungi semua pemboleh ubah tertentu atau kemungkinan yang Skrip shell memerlukan atau akan memerlukan pelaksanaannya. Saya secara peribadi menambah yang berikut:


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

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

Nota: Bergantung pada keperluan atau pelaksanaan anda, anda boleh menambahkan perintah arahan eksport my_variable di bawah setiap pemboleh ubah sebelumnya yang dibuat atau buat dan eksport pemboleh ubah anda sendiri yang dibuat secara langsung dengan arahan perintah eksport my_variable = my_parameter

Kemudian, dalam catatan akan datang kita akan terus melihat contoh modul (bahagian) yang melaksanakan fungsi seperti:

  • MODUL DETEKSI PELAKSANAAN BERGANDA atau PERLAKSANAAN GAGAL
  • MODUL PENGOPERASIAN
  • MODUL KEBENARAN PENGGUNA DENGAN KATA LALUAN
  • MODUL PENETAPAN ARKITEK SISTEM OPERASI
  • MODUL KONFIGURASI BAHASA KOD
  • MODUL KONFIGURASI PROXY UNTUK PERSEKITARAN PELAKSANAAN

Antara lain!

Mereka boleh belajar sendiri mengenai perintah: gksu, dialog, gxmessage, zenity, espeak, main, antara lain untuk membuat antara muka grafik dengan Terminal atau untuk Desktop Pengguna, dengan amaran sonik atau multimedia, dan memajukan pengetahuan yang akan mereka gunakan kemudian.

Ingat bahawa ini dan cadangan lain pada beberapa modul, fungsi, pemboleh ubah, arahan atau tindakan secara amnya dapat dijalankan banyak cara, dan apa yang ditunjukkan di sini hanyalah satu cara mudah, dari banyak cara yang mungkin dan mungkin di mana dikatakan tindakan boleh atau boleh dijalankan!

Selesai sahaja saya meninggalkan anda, a Screencast yang dibuat oleh saya, untuk menunjukkan kepada anda apa yang anda mampu, setelah menyelesaikan ini Kursus dalam talian Skrip Shell dalam DesdeLinux:

Skrin Skrin Ujian LPI-SB8

(PEMASANGAN LINUX POST - SCRIPT BICENTENARIO 8.0.0) - Bahagian 2


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   tidak bernama kata

    Tarikh untuk manusia:
    echo -e «\ e [1; 32mTarikh:» $ (tarikh «+% d-% m-% Y») «\ e [1; 32m Masa:» $ (tarikh «+% T»)

    Betul "uname -s":
    kucing / proc / sys / kernel / ostype

    Nama distro:
    pelepasan kucing / etc / * | potong -f2 -d »| kepala -1

    Nama Hos:
    cat / proc / sys / kernel / nama host

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

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

  2.   Jose Albert kata

    Saya sangat menyukai sumbangan pertama anda "tarikh untuk manusia" kerana hasilnya akan menjadi contoh:

    Tarikh: 11-02-2016 Masa: 16:04:10

    Yang berkesan dalam tetingkap dialog, kegembiraan atau gxmessage sangat mudah dicerna!

    Dengan cadangan kedua anda, saya ingin meletakkannya seperti ini:

    jika benar "uname -s" && cat / proc / sys / kernel / ostype; kemudian gema "Sistem operasi disahkan"; fi | dahaga 1d

    Dan akhirnya, terima kasih banyak atas sumbangan yang diperkaya seperti biasa!