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

לְהַכּוֹת זוהי תוכנת מחשב שתפקידה לפרש פקודות. זה מבוסס על הקליפה של יוניקס ונכתב לפרויקט גנה להיות מעטפת ברירת המחדל ברוב ההפצות של גנו / לינוקס. שמו הוא ראשי תיבות של פגז בורן-שוב (עוד בורן פגז), עושה משחק מילים (נולד מחדש פירושו לידה מחדש) על פגז בורן (ש), שהיה אחד המתורגמנים הראשונים של יוניקס.

היום אנו הולכים להראות כמה סקריפטים של מעטפת שיכולים להיות שימושיים מאוד עבור מפתחים. רובם עובדים בכל מעטפת יוניקס, אם כי יש הדורשים לבצע אותם באופן ספציפי על ידי לְהַכּוֹת.

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

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

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

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

במקרה כזה קובץ הנעילה לא יימחק, ולכן הוא לא יאפשר לנו להריץ את הסקריפט שוב. כדי לכסות את המקרים הללו, נוכל להשתמש בפקודת המלכודת המאפשרת לנו לבצע פקודות במקרה שהתסריט שלנו מסתיים באופן בלתי צפוי. זו גרסה מתקדמת יותר ששומרת גם את ה- 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

בואו נבין את הפקודה קצת יותר טוב מלכודת. התחביר שלו הוא בעצם זה: אות פקודה מלכודת [אות ...]; איפה האות הוא אות הסיום שברצונך לתפוס. אם אתה רוצה לראות רשימה של אותות זמינים, תוכל להפעיל את הפקודה kill -l. במקרה הקודם נעשה שימוש באותות ה- INT (לוכדת את הסיום המיוצר על ידי Ctrl + c), טווח (סיום המיוצר על ידי פקודת kill) ו- 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"

סוף המאמר. פשוט נהדר 😀

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


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   KZKG ^ גאארה דיג'ו

    לעזאזל הם נהדרים O_O ... זה יעזור מאוד לדברים שלי שאני עושה בבש

  2.   Ren434 דיג'ו

    התסריטים סופר! איזו תרומה נהדרת ברצינות, בדיוק מה שחיפשתי.

    נ.ב: הפורום נגמר.

    1.    KZKG ^ גאארה דיג'ו

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

      ברכות.

  3.   Ren434 דיג'ו

    נו טוב, נקווה שזה שום דבר רציני.

  4.   שמאלי דיג'ו

    האם "המוץ" ההוא נכלל גם בקוד נינג'ה? XD

  5.   טרגון דיג'ו

    אני אוהב את העוצמה של bash 😉 והם אמרו לי בשביל מה נועדה שפת C ... ובכן, ב script shell יש פקודות מוכרות רבות.

  6.   כריסטופר דיג'ו

    תודה, אהבתי מאוד

  7.   אנג'לבלייד דיג'ו

    אימות פרמטרי קלט מאוד שימושי. לא ידעתי להכין את התפריטים =)

  8.   Hyuuga_Neji דיג'ו

    גדול…. עכשיו אני יכול לתת קצת "קשיות" לתסריט שלי cholros lol

  9.   עוֹרֵב דיג'ו

    תענוג גדול לראות כיצד העבודה הצנועה שלנו ב- CodeNinja משרתת את קהילת הלינוקס הבינלאומית

    1.    KZKG ^ גאארה דיג'ו

      ברור! 🙂
      הכל הוא לעזור ולתרום יחד, ולא ליצור להבות, נכון? 😉

  10.   דייגו דיג'ו

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

    #! / bin / bash
    הד "בחר שירות"
    קרא שירות
    # SERVICE = 'mysql'
    אם גרזן ps | grep -v grep | grep $ SERVICE> / dev / null
    אז
    הד "שירות $ SERVICE פועל"
    אחר
    הד "שירות $ SERVICE הופסק"

  11.   חואה קרלוס סי דיג'ו

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

    1.    דייגו דיג'ו

      התקן את התוכנית הבאה

      יכולת להתקין

      ויש לך את קובץ התצורה ב /etc/autolog.conf

  12.   טיטו דיג'ו

    נהדר, חבר, אני יכול לשאול אותך שאלה, אני צריך סקריפט מעטפת עם אפשרויות ובסיסתי אותו על שלך וזה עובד מצוין, אבל אחת האפשרויות צריכה לשלוח מיילים (באמצעות פוסט-פיקס), הוא מבקש נושא, טקסט ונמענים על המסך ומה שולחים ובודקים שהוא נשלח כראוי, עם mailq אני יכול לראות את התור ולראות אם הוא נשלח, אבל איך אני שולח את הדוא"ל באמצעות פקודה באמצעות המשתנים שקיבלו נושא, טקסט ונמענים ? 🙁

    1.    KZKG ^ גאארה דיג'ו

      כתוב למייל שלי (kzkggaara[at]desdelinux[dot]net) כדי לדבר בצורה רגועה יותר, אשמח לעזור לך :)

      1.    טיטו דיג'ו

        תודה גדולה חבר, עברת!

  13.   Fer דיג'ו

    שלום טוב.
    נתקלתי בדוגמאות המצוינות האלה בדיוק כשהייתי זקוק לתפריט.
    התחלתי לעשות את זה ואני לא מצליח לגרום לזה לעבוד (בשלבים הקודמים).
    יש לי 247 אלמנטים, המתייחסים לתחומים הטריטוריאליים השונים.
    מה שאני צריך זה תפריט מאיפה לבחור את המדינה:
    #! / bin / bash
    ברור
    בזמן:
    do
    הד »בחר את המדינה לנסות»
    הד «1. אפגניסטן (AF) »
    הד «2. אלבניה (אל) »
    הד «3. גרמניה (DE) »
    הד «5. אנגולה (AO) »
    הד «6. אנגווילה (AI) »
    .. וממשיך עד 247

    echo -n "בחר אפשרות [1 - 247]"
    אפשרות קריאה
    מקרה $ אפשרות ב
    1) מהדהד "זה אתה:"; ווהאמי ;;
    2) הד "יש לך את זה"; df ;;
    3) הד ""; uname -r ;;
    4) הד "ביי"; יציאה 1 ;;
    5) מהדהד "זה אתה:"; ווהאמי ;;
    6) מהדהד "זה אתה:"; ווהאמי ;;
    ... וממשיך עד 247
    *) הד «$ opc היא אפשרות לא חוקית. זה כל כך קשה?";
    הד "לחץ על מקש כדי להמשיך ...";
    קרא foo ;;
    esac
    עשה

    ההתנהגות היא כדלקמן:
    כל אפשרות למעט 4, שהיא הפלט, מוחקת את המספר שהוזן ומחכה למספר חדש.
    הזנת 4 יוצאת.
    אם אני שם את הקוד של 4 בשורה אחרת (נניח 150) הוא יוצא באותה מידה ללא בעיות.
    ניסיתי גם לשים את הקוד בפורמט זה:
    151) מהדהד "זה אתה:";
    מי אני ;;
    עם אותה תוצאה.
    מעניין אם יש אפשרויות טובות יותר לתפריט כל כך ארוך וכמובן שגם אני עושה לא בסדר.
    עזרה תוערך מאוד, תודה

  14.   רק ראול דיג'ו

    מעולה ... אני חושב שזה טוב מאוד להיכנס לקליפה

    תודה

  15.   מרקוס דיג'ו

    היי נהדר איך אני יכול לגרום לבאס שלי לעבוד עם קובץ
    לדוגמה:

    upload.sh fotodelavecina.jpg

    במחשבה שלסקריפט הבאשי שלי "upload.sh" יש את פרטי הגישה ל- ftp שלי

    ברכות ותודות 😀

  16.   netzulo ntx דיג'ו

    איש טוב, תודה רבה לך על כל התסריטים, הקמתי שרת CentOS ואתה לא יודע עד כמה תבניות אלו מגיעות אלי, בבקשה, צרו איתי קשר במייל. אני רוצה להציע לך משהו

  17.   גבריאל בלדרמוס דיג'ו

    מדוע אתה משתמש ב- read foo בעת הכנת תפריט? תשובות מהירות שאני צריך