לְהַכּוֹת זוהי תוכנת מחשב שתפקידה לפרש פקודות. זה מבוסס על הקליפה של יוניקס ונכתב לפרויקט גנה להיות מעטפת ברירת המחדל ברוב ההפצות של גנו / לינוקס. שמו הוא ראשי תיבות של פגז בורן-שוב (עוד בורן פגז), עושה משחק מילים (נולד מחדש פירושו לידה מחדש) על פגז בורן (ש), שהיה אחד המתורגמנים הראשונים של יוניקס.
היום אנו הולכים להראות כמה סקריפטים של מעטפת שיכולים להיות שימושיים מאוד עבור מפתחים. רובם עובדים בכל מעטפת יוניקס, אם כי יש הדורשים לבצע אותם באופן ספציפי על ידי לְהַכּוֹת.
מנע ממשתמשים שאינם מורשים להפעיל את הסקריפט
סקריפטים מסוימים מבצעים משימות ניהוליות ולכן אנו רוצים שרק משתמש הבסיס יפעיל את הסקריפט. במקרה כזה אנו יכולים להשתמש במשהו כזה:
#!/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"
סוף המאמר. פשוט נהדר 😀
עריכה: אתה צריך להיות זהיר עם רווחים ולשוניות, שמשום מה לא יוצאים ¬¬
לעזאזל הם נהדרים O_O ... זה יעזור מאוד לדברים שלי שאני עושה בבש
התסריטים סופר! איזו תרומה נהדרת ברצינות, בדיוק מה שחיפשתי.
נ.ב: הפורום נגמר.
כן, השרת בו מותקן הפורום לא מקוון, אין מושג מדוע ... כתבנו אימייל לחבר שדואג לזה, כדי לראות מה הוא מגיב לנו 🙂
ברכות.
נו טוב, נקווה שזה שום דבר רציני.
האם "המוץ" ההוא נכלל גם בקוד נינג'ה? XD
אני אוהב את העוצמה של bash 😉 והם אמרו לי בשביל מה נועדה שפת C ... ובכן, ב script shell יש פקודות מוכרות רבות.
תודה, אהבתי מאוד
אימות פרמטרי קלט מאוד שימושי. לא ידעתי להכין את התפריטים =)
גדול…. עכשיו אני יכול לתת קצת "קשיות" לתסריט שלי cholros lol
תענוג גדול לראות כיצד העבודה הצנועה שלנו ב- CodeNinja משרתת את קהילת הלינוקס הבינלאומית
ברור! 🙂
הכל הוא לעזור ולתרום יחד, ולא ליצור להבות, נכון? 😉
ניתן לשפר מעט את סקריפט התהליך שפועל על ידי הצבת האפשרות לבחור את התהליך שאתה רוצה לדעת עליו, זה ייראה בערך כך:
#! / bin / bash
הד "בחר שירות"
קרא שירות
# SERVICE = 'mysql'
אם גרזן ps | grep -v grep | grep $ SERVICE> / dev / null
אז
הד "שירות $ SERVICE פועל"
אחר
הד "שירות $ SERVICE הופסק"
אני מאוד מעשי עם התסריטים שלך, אבל אני מחפש סקריפט מיוחד לפתרון בעיה שיש לי, והיא הבאה: יש לנו שרת יישומים בחברה שמשתמשים פנימיים ניגשים אליו באמצעות Telnet ומבצעים יישום מיוחד. זה מוגבל עבור רישיונות, משתמשים משתמשים לרעה ולפתוח יותר מ- Telnet אחד כדי להשתלט על 2 רישיונות או יותר, כך שהתסריט שחשבתי הוא שעל פי שיטה כלשהי, לבדוק איזה תהליך Telnet אינו פעיל יותר משעתיים ולכן שלח הרג לפיד הזה, אתה יכול לעזור לי?
התקן את התוכנית הבאה
יכולת להתקין
ויש לך את קובץ התצורה ב /etc/autolog.conf
נהדר, חבר, אני יכול לשאול אותך שאלה, אני צריך סקריפט מעטפת עם אפשרויות ובסיסתי אותו על שלך וזה עובד מצוין, אבל אחת האפשרויות צריכה לשלוח מיילים (באמצעות פוסט-פיקס), הוא מבקש נושא, טקסט ונמענים על המסך ומה שולחים ובודקים שהוא נשלח כראוי, עם mailq אני יכול לראות את התור ולראות אם הוא נשלח, אבל איך אני שולח את הדוא"ל באמצעות פקודה באמצעות המשתנים שקיבלו נושא, טקסט ונמענים ? 🙁
כתוב למייל שלי (kzkggaara[at]desdelinux[dot]net) כדי לדבר בצורה רגועה יותר, אשמח לעזור לך :)
תודה גדולה חבר, עברת!
שלום טוב.
נתקלתי בדוגמאות המצוינות האלה בדיוק כשהייתי זקוק לתפריט.
התחלתי לעשות את זה ואני לא מצליח לגרום לזה לעבוד (בשלבים הקודמים).
יש לי 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) מהדהד "זה אתה:";
מי אני ;;
עם אותה תוצאה.
מעניין אם יש אפשרויות טובות יותר לתפריט כל כך ארוך וכמובן שגם אני עושה לא בסדר.
עזרה תוערך מאוד, תודה
מעולה ... אני חושב שזה טוב מאוד להיכנס לקליפה
תודה
היי נהדר איך אני יכול לגרום לבאס שלי לעבוד עם קובץ
לדוגמה:
upload.sh fotodelavecina.jpg
במחשבה שלסקריפט הבאשי שלי "upload.sh" יש את פרטי הגישה ל- ftp שלי
ברכות ותודות 😀
איש טוב, תודה רבה לך על כל התסריטים, הקמתי שרת CentOS ואתה לא יודע עד כמה תבניות אלו מגיעות אלי, בבקשה, צרו איתי קשר במייל. אני רוצה להציע לך משהו
מדוע אתה משתמש ב- read foo בעת הכנת תפריט? תשובות מהירות שאני צריך