OnWorks Linux ו-Windows Online WorkStations

לוגו

אירוח מקוון בחינם עבור תחנות עבודה

<הקודם | תוכן | הבא>

אם תרצה, הנחיות יכולות להפעיל סקריפטים של מעטפת ולהתנהג אחרת בתנאים שונים. אתה יכול אפילו להשמיע מנגינה בכל פעם שאתה מוציא פקודה, אם כי זה משעמם די מהר. מידע נוסף ניתן למצוא ב-Bash-Prompt HOWTO.


תמונה

7.2.5. סקריפטים של מעטפת


7.2.5.1. מהם תסריטים?


סקריפט מעטפת הוא, כפי שראינו בדוגמאות של תצורת מעטפת, קובץ טקסט המכיל פקודות מעטפת. כאשר קובץ כזה משמש כארגומנט הלא-אופציה הראשון בעת ​​הפעלת Bash, וגם לא ה- -c ולא -s אפשרות מסופקת, Bash קורא ומבצע פקודות מהקובץ, ואז יוצא. אופן פעולה זה יוצר א

מעטפת לא אינטראקטיבית. כאשר Bash מריץ סקריפט מעטפת, הוא מגדיר את הפרמטר המיוחד 0 לשם הקובץ, במקום לשם המעטפת, והפרמטרים המיקוםיים (כל מה שאחרי שם הסקריפט) מוגדרים לשאר הארגומנטים, אם יש כאלה. אם לא סופקו ארגומנטים נוספים, הפרמטרים המיקוםיים אינם מוגדרים.


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


שם הקובץ טיעונים


שווה ערך לביצוע


לחבוט שם הקובץ ARGUMENTS


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


רוב הגרסאות של UNIX הופכות את זה לחלק ממנגנון ביצוע הפקודות של מערכת ההפעלה. אם השורה הראשונה של סקריפט מתחילה בשני התווים "#!", שאר השורה מציין מתורגמן עבור התוכנית. לפיכך, אתה יכול לציין לחבוט, awk, פרל או מתורגמן אחר או מעטפת וכתוב את שאר קובץ הסקריפט בשפה זו.


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


תסריטי Bash מתחילים לעתים קרובות עם


#! / bin / bash (בהנחה שבאש הותקן ב / סל), מכיוון שזה מבטיח ש-Bash ישמש לפרש את התסריט, גם אם הוא מבוצע תחת מעטפת אחרת.


תמונה


7.2.5.2. כמה דוגמאות פשוטות


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


[jerry@nowhere ~] חתול שלום.ש

#! / bin / bash

הד "שלום $USER"

[jerry@nowhere ~] חתול שלום.ש

#! / bin / bash

הד "שלום $USER"

התסריט למעשה מורכב מפקודה אחת בלבד, הדהמשתמשת ב- ערך של ($) את משתמש משתנה סביבה להדפסת מחרוזת מותאמת אישית למשתמש המוציא את הפקודה.


One-liner נוסף, המשמש להצגת משתמשים מחוברים:


#! / bin / bash

מי | לחתוך -d " " -f 1 | מיון -u

#! / bin / bash

מי | לחתוך -d " " -f 1 | מיון -u

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


tille:~> cat bin/makebackupfiles.sh

#! / bin / bash

# צור עותקים של כל הקבצים בספריה LIST=`ls`

עבור i ב-$LIST; לַעֲשׂוֹת

ORIG=$i

DEST=$i.old

cp $ORIG $DEST echo "העתק $i"

עשה

tille:~> cat bin/makebackupfiles.sh

#! / bin / bash

# צור עותקים של כל הקבצים בספריה LIST=`ls`

עבור i ב-$LIST; לַעֲשׂוֹת

ORIG=$i

DEST=$i.old

cp $ORIG $DEST echo "העתק $i"

עשה

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


אל האני /etc/rc.d/init.d ספרייה מכילה המון דוגמאות. בואו נסתכל על הסקריפט הזה ששולט בשרת ה-ICanSeeYou הפיקטיבי:


# / Bin / sh

# תיאור: ICanSeeYou מאפשר לך לראות אנשים מחוברים ברשת


# שם תהליך: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# config: /etc/ICanSeeYou.cfg


# ספריית פונקציות מקור.

. /etc/rc.d/init.d/functions


# ראה איך (באיזה טיעונים) קראו לנו. מקרה "$1" ב

הַתחָלָה)

echo -n "Starting ICanSeeYou: " הדמון ICanSeeYou

הד

גע ב-/var/lock/subsys/ICanSeeYou

;;

תפסיק)

echo -n "כיבוי של ICanSeeYou: "

# / Bin / sh

# תיאור: ICanSeeYou מאפשר לך לראות אנשים מחוברים ברשת


# שם תהליך: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# config: /etc/ICanSeeYou.cfg


# ספריית פונקציות מקור.

. /etc/rc.d/init.d/functions


# ראה איך (באיזה טיעונים) קראו לנו. מקרה "$1" ב

הַתחָלָה)

echo -n "Starting ICanSeeYou: " הדמון ICanSeeYou

הד

גע ב-/var/lock/subsys/ICanSeeYou

;;

תפסיק)

echo -n "כיבוי של ICanSeeYou: "


killproc ICanSeeYou הד

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

סטָטוּס)

סטטוס ICanSeeYou

;;

הפעלה מחדש)

0$ עצירה

התחלה של $0

;;

*)

echo "שימוש: $0 {start|stop|restart|status}" יציאה 1

esac


צא מ- 0

killproc ICanSeeYou הד

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

סטָטוּס)

סטטוס ICanSeeYou

;;

הפעלה מחדש)

0$ עצירה

התחלה של $0

;;

*)

echo "שימוש: $0 {start|stop|restart|status}" יציאה 1

esac


צא מ- 0

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

/etc/rc.d/init.d, נטען. ואז א מקרה מופקת פקודה, המגדירה 4 דרכים שונות שהסקריפט יכול לבצע. דוגמה יכולה להיות אני יכול לראות אותך התחלה. ההחלטה באיזה מקרה להגיש בקשה מתקבלת על ידי קריאת הטיעון (הראשון) לתסריט, עם הביטוי $1.


כאשר לא ניתן קלט תואם, מוחל מקרה ברירת המחדל, המסומן בכוכבית, שעליו הסקריפט נותן הודעת שגיאה. ה מקרה הרשימה מסתיימת ב- esac הַצהָרָה. בתוך ה התחלה במקרה שתוכנית השרת מופעלת בתור דמון, ומזהה תהליך ומנעול מוקצים. בתוך ה להפסיק במקרה, תהליך השרת מתחקה ונעצר, והמנעול וה-PID מוסרים. אפשרויות, כגון דמון אפשרות, ופונקציות כמו killproc, מוגדרים ב- /etc/rc.d/init.d/functions קוֹבֶץ. הגדרה זו ספציפית להתפלגות המשמשת בדוגמה זו. ה-initscripts במערכת שלך עשויים להשתמש בפונקציות אחרות, המוגדרות בקבצים אחרים, או בשום פונקציה.


לאחר הצלחה, הסקריפט מחזיר קוד יציאה של אפס להורה שלו.


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


מחשוב ענן מערכת ההפעלה המוביל ב-OnWorks: