סקריפטים שימושיים של מעטפת בכל תוכנית

Bash היא תוכנת מחשב שתפקידה לפרש פקודות. היא מבוססת על מעטפת יוניקס ונכתבה עבור פרויקט GNU , בהיותה מפרש הפקודות המוגדר כברירת מחדל ברוב הפצות GNU/Linux . שמה הוא ראשי תיבות של Bourne-Again Shell , משחק מילים (born-again פירושו לידה מחדש) המתייחס למעטפת Bourne (sh) , שהייתה אחת ממפרשי יוניקס העיקריים הראשונים.

היום אנחנו הולכים להראות לכם כמה סקריפטים של מעטפת שיכולים להיות שימושיים מאוד למפתחים. רובם עובדים בכל מעטפת יוניקס , אם כי חלקם דורשים הפעלה ספציפית של Bash.

מנע ממשתמשים שאינם מורשים להפעיל את הסקריפט

סקריפטים מסוימים מבצעים משימות ניהוליות ולכן אנו רוצים שרק משתמש הבסיס יפעיל את הסקריפט. במקרה כזה אנו יכולים להשתמש במשהו כזה:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

אפשר ביצוע סקריפט רק למשתמש ספציפי

בדומה לקוד לעיל, ייתכן שנרצה רק משתמש ספציפי שיפעיל את הסקריפט. אנו עושים זאת כך:

#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi

ודא כי שירות / תהליך פועל

אם אנחנו רוצים לדעת אם ישנם תהליכים משירות או תוכנית הפועלים, נוכל להשתמש בסקריפט הזה (במקרה זה, הוא בודק שדמון האפאצ'י פועל) :

#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi

צור קובץ נעילה

לפעמים עלינו לוודא שהתסריט לא פועל פעמיים או יותר בו זמנית. לשם כך אנו יכולים לעשות שימוש בקבצי הנעילה. זוהי גרסה פשוטה של ​​סקריפט המאפשרת לנו לעשות זאת:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi

במקרה זה, הסקריפט בודק אם הקובץ `loquesea.lock` קיים. אם הוא קיים, הסקריפט אינו מבצע את המשימות שלו. אם הוא אינו קיים, הוא יוצר את הקובץ, מבצע את המשימות הדרושות ולאחר מכן מוחק אותו. עם זאת, זה לא אמין לחלוטין. מה יקרה אם הסקריפט שלנו ייסגר בפתאומיות בזמן שהוא פועל?

במקרה כזה קובץ הנעילה לא יימחק, ולכן הוא לא יאפשר לנו להריץ את הסקריפט שוב. כדי לכסות את המקרים הללו, נוכל להשתמש בפקודת המלכודת המאפשרת לנו לבצע פקודות במקרה שהתסריט שלנו מסתיים באופן בלתי צפוי. זו גרסה מתקדמת יותר ששומרת גם את ה- PID של הסקריפט שמבצע אותה בתוך קובץ הנעילה:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi

בואו נבין קצת יותר טוב את פקודת ה -`trap` . התחביר שלה הוא בעיקרון כזה: `trap command signal [signal …];` כאשר `signal` הוא אות הסיום שברצונך ללכוד. אם ברצונך לראות רשימה של אותות זמינים, תוכל להריץ את הפקודה `kill -l`. בדוגמה הקודמת, האותות ששימשו היו `INT` (לוכד את אות הסיום המופק על ידי Ctrl+c) , `TERM` (סיום המופק על ידי פקודת ה-`kill`) , ו-`EXIT` (סיום רגיל של סקריפט, בין אם מכיוון שאין עוד שורות לביצוע ובין אם מכיוון שהוא נתקל בפקודת ה-`exit`).

תפריט אפשרויות

כדי להכין תפריט שבו אנו מאפשרים למשתמש לבחור סדרה של אפשרויות נוכל להשתמש בתכנית הבאה:

#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done

בקש אישור לפני הפעלת סקריפט

לפעמים כדאי שהמשתמש יאשר ביצוע קבוצה של הצהרות, כלומר ההודעה האופיינית שמבקשת מהמשתמש להקליד כן או לא. אנחנו יכולים לעשות זאת כך:

#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"

סוף המאמר. פשוט מעולה 

עריכה: אני צריך להיזהר עם רווחים וטאבים, כי מסיבה כלשהי אני לא מצליח לעשות אותם נכון ¬¬


הוסף כמקור מועדף בגוגל