قم ببناء برنامجك خطوة بخطوة باستخدام Shell Scripting - الجزء 2

في جزء 1 من هذه السلسلة نتذكر كيفية تنفيذ:

وفي السابق ، غمرنا أنفسنا ممارسات أفضل لمتابعة عند إنشاء ملف ممتاز نص شل النصي في Bash لنظام التشغيل Linux ، وعلى وجه التحديد من حيث تصميم أ Shebang و BSM (وضع Bash Strict / وضع Strict Bash).

أفضل الممارسات لإنشاء برنامج شل سكريبت في جنو / لينكس - الجزء الأول

أفضل الممارسات لإنشاء برنامج شل سكريبت في جنو / لينكس - الجزء الأول

برمجة شل

في هذا المنشور سوف نرى كيفية تنفيذ ملف وحدة متغيرات البيئة لبرنامج Shell Script في Bash لنظام التشغيل Linux، مع الأخذ كمثال واحد من بلدي برامج (تطبيقات) الحقائق في أ شيل ودعا تثبيت Linux Post - Bicentennial Script 8.0، ولكن أولاً ملخص صغير لملف ممارسات أفضل حتى تضعها في اعتبارك:

  • Indente التعليمات البرمجية الخاصة بك ،
  • أضف مسافات منفصلة بين أقسام الكود ،
  • قم بالتعليق بقدر ما تستطيع على الكود ،
  • إنشاء متغيرات بأسماء وصفية لوظائفها ،
  • استخدم بناء الجملة VARIABLE = $ (أمر) لاستبدال الأمر
  • استخدم وحدات و / أو متغيرات: المستخدم المتميز والمصرح له بالتحقق من صحة المستخدم مع أو بدون كلمات المرور المحددة.
  • استخدم وحدات و / أو متغيرات: التحقق من صحة نظام التشغيل (Distro ، Version ، Architecture ، من بين أمور أخرى.) ،
  • استخدم الوحدات النمطية (الإجراءات / الأقسام) لتأكيد تنفيذ الإجراءات الحرجة أو الدفعية (الأنشطة / الوظائف) ،
  • توفير واجهات سهلة الاستخدام (سهلة الاستخدام): عن طريق الوحدة الطرفية (مع القوائم والألوان باستخدام مربع الحوار) و / أو عن طريق سطح المكتب (مع Windows باستخدام Zenity و Gxmessage) ،
  • قم بتضمين وحدات الترحيب والوداع (الرسائل) للمستخدم ، إذا لزم الأمر ،
  • تضمين وحدة تحقق تشغيل مزدوج ،
  • ترشيد حجم البرنامج النصي باستخدام وظائف و / أو وحدات خارجية ،
  • استدعاء المكالمات للمترجمين الفوريين الآخرين بطريقة واضحة وواضحة ،
  • قم بتطبيق أي توصية منطقية وعقلانية أخرى تراها ضرورية.

هنا مثال على ملف وحدة متغيرات البيئة لبرنامج Shell Script في Bash لنظام التشغيل Linux. يجب أن تكون هذه هي الوحدة (القسم) التي تحتوي على جميع تلك المتغيرات المؤكدة أو المحتملة التي يمتلكها شيل يحتاج أو سيحتاج لتنفيذه. أنا شخصيا أضيف ما يلي:


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

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

ملاحظة: بناءً على متطلباتك أو تطبيقاتك ، يمكنك إضافة أمر الأمر تصدير my_variable أسفل كل من المتغيرات السابقة التي تم إنشاؤها أو إنشاء وتصدير المتغيرات الخاصة بك التي تم إنشاؤها مباشرة باستخدام الأمر تصدير my_variable = my_parameters

في وقت لاحق ، في المشاركات المستقبلية سنستمر في رؤية مثال على وحدات (أقسام) التي تؤدي وظائف مثل:

  • DOUBLE EXECUTION DETECTION MODULE أو FILED EXECUTION
  • وحدة التحسين
  • وحدة تفويض المستخدم مع كلمة المرور
  • وحدة الكشف عن بنية نظام التشغيل
  • وحدة تكوين لغة الترميز
  • وحدة تكوين الوكيل لبيئة التنفيذ

من بين عدة آخرين!

يمكنهم تعلم الأوامر بأنفسهم: gksu ، الحوار ، gxmessage ، zenity ، espeak ، play، من بين عدة آخرين لإنشاء واجهات رسومية بواسطة Terminal أو لسطح مكتب المستخدم ، مع تنبيهات صوتية أو تنبيهات الوسائط المتعددة، والمعرفة المتقدمة التي سيستخدمونها لاحقًا.

تذكر أن هذه وغيرها من التوصيات على بعض وحدة ، وظيفة ، متغير ، أمر أو إجراء بشكل عام يمكن تنفيذه طرق عديدة، وما يظهر هنا هو واحد فقط طريقة بسيطةمن العديد من الطرق الممكنة والمحتملة الذي قال فيه يمكن أو يمكن القيام به!

فقط لأنتهي أتركك ، أ Screencast من قبلي، لتظهر لك ما ستكون قادرًا عليه ، بعد الانتهاء من ذلك دورة البرمجة النصية لـ Shell عبر الإنترنت في DesdeLinux:

اختبار ScreenCast LPI-SB8

(تثبيت ما بعد لينكس - النص الذي تم تثبيته في الذكرى المئوية الثانية 8.0.0) - الجزء 2


2 تعليقات ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   مجهول قال

    التاريخ للبشر:
    صدى -e «\ e [1؛ 32 دقيقة التاريخ:» $ (التاريخ «+٪ d-٪ m-٪ Y») «\ e [1؛ 32 دقيقة الوقت:» $ (التاريخ «+٪ T»)

    صحيح "uname -s":
    cat / proc / sys / kernel / ostype

    اسم التوزيعة:
    قطة / الخ / * الإصدار | قطع -f2 -d »| رأس -1

    اسم المضيف:
    cat / proc / sys / kernel / hostname

    بنية نظام التشغيل:
    [[-x / sbin / init]] && ملف / sbin / init | awk '{print $ 7}' | tr -d '،' || [[-x / lib / systemd / systemd]] && ملف / lib / systemd / systemd | awk '{print $ 7}' | tr -d '،' 2> / dev / null

    إصدار النواة:
    cat / proc / sys / kernel / osrelease

  2.   المهندس خوسيه ألبرت قال

    لقد أحببت حقًا مساهمتك الأولى "تاريخ للبشر" لأن الإخراج سيكون كمثال:

    التاريخ: 11-02-2016 الوقت: 16:04:10

    وهي فعالة في نافذة الحوار أو zenity أو gxmessage سهلة الهضم للغاية!

    مع اقتراحك الثاني ، أود وضعه على النحو التالي:

    إذا كان صحيحًا "uname -s" && cat / proc / sys / kernel / ostype ؛ ثم صدى "التحقق من صحة نظام التشغيل" ؛ فاي | العطش 1 د

    وأخيرًا ، شكراً جزيلاً لك على مساهماتك المثمرة كالعادة