OnWorks Linux ו-Windows Online WorkStations

לוגו

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

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

תכנות הגנתי

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


cd $dir_name rm *

cd $dir_name rm *


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

בואו נסתכל על כמה דרכים שאפשר לשפר את העיצוב הזה. ראשית, אולי יהיה חכם לבצע את הביצוע של rm מותנה בהצלחתו של cd:


cd $dir_name && rm *

cd $dir_name && rm *


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



[[ -d $dir_name ]] && cd $dir_name && rm *

[[ -d $dir_name ]] && cd $dir_name && rm *


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



# מחק קבצים בספרייה $dir_name אם [[ ! -d "$dir_name" ]]; לאחר מכן

echo "אין ספרייה כזו: '$dir_name'" >&2 יציאה 1

fi

אם ! cd $dir_name; לאחר מכן

echo "Cannot cd to '$dir_name'" >&2 יציאה 1

fi

אם ! rm *; לאחר מכן

echo "מחיקת הקובץ נכשלה. בדוק תוצאות" >&2 צא 1

fi

# מחק קבצים בספרייה $dir_name אם [[ ! -d "$dir_name" ]]; לאחר מכן

echo "אין ספרייה כזו: '$dir_name'" >&2 יציאה 1

fi

אם ! cd $dir_name; לאחר מכן

echo "Cannot cd to '$dir_name'" >&2 יציאה 1

fi

אם ! rm *; לאחר מכן

echo "מחיקת הקובץ נכשלה. בדוק תוצאות" >&2 צא 1

fi


כאן, אנו בודקים גם את השם, כדי לראות שהוא זה של ספרייה קיימת, וגם את ה-

שגיאות לוגיות


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


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