OnWorks Linux ו-Windows Online WorkStations

לוגו

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

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

הרחבות בלתי צפויות

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


יכול להדגים:



#! / bin / bash


# בעיה: סקריפט להדגמת שגיאות נפוצות


מספר=


if [$number = 1]; לאחר מכן

echo "מספר שווה ל-1." אַחֵר

echo "המספר אינו שווה ל-1."

fi

#! / bin / bash


# בעיה: סקריפט להדגמת שגיאות נפוצות


מספר=


if [$number = 1]; לאחר מכן

echo "מספר שווה ל-1." אַחֵר

echo "המספר אינו שווה ל-1."

fi


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



[me@linuxbox ~]$ צרה

/home/me/bin/trouble: שורה 7: [: =: צפי לאופרטור אונארי המספר אינו שווה ל-1.

[me@linuxbox ~]$ צרה

/home/me/bin/trouble: שורה 7: [: =: צפי לאופרטור אונארי המספר אינו שווה ל-1.


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



[$number = 1]

[$number = 1]


עובר הרחבה עם מספר בהיותו ריק, התוצאה היא כזו:


[= 1]

[= 1]


שאינו חוקי והשגיאה נוצרת. ה = אופרטור הוא אופרטור בינארי (הוא דורש ערך בכל צד), אבל הערך הראשון חסר, אז ה- מבחן הפקודה מצפה לאופרטור unary (כגון -z) במקום זאת. יתר על כן, מאז ה מבחן נכשל (בגלל השגיאה), ה if הפקודה מקבלת קוד יציאה שאינו אפס ופועלת בהתאם, והשנייה הד הפקודה מבוצעת.

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

פקודה:


[ "$number" = 1 ]

[ "$number" = 1 ]


לאחר מכן כאשר מתרחשת הרחבה, התוצאה תהיה כזו:



["" = 1]

["" = 1]


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


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