OnWorks Linux ו-Windows Online WorkStations

לוגו

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

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

אימות קלט

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


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

כאן יש לנו תוכנית לדוגמה שמאמתת סוגים שונים של קלט:



#! / bin / bash

# read-validate: validate input invalid_input () {

echo "קלט לא חוקי '$REPLY'" >&2 יציאה 1

}


קרא -p "הזן פריט בודד > "


קלט אחד ריק (לא חוקי)

[[ -z $REPLY ]] && invalid_input


קלט אחד הוא מספר פריטים (לא חוקי)

(( $(echo $REPLY | wc -w) > 1 )) && invalid_input


# האם הזנת שם קובץ חוקי?

if [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; ואז הד "'$REPLY' הוא שם קובץ חוקי."

if [[ -e $REPLY ]]; לאחר מכן

echo "וקובץ '$REPLY' קיים."

אחר

echo "עם זאת, הקובץ '$REPLY' אינו קיים."

fi


# האם הזנת מספר נקודה צפה?

if [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; ואז הד "'$REPLY' הוא מספר נקודה צפה."

אחר

echo "'$REPLY' אינו מספר נקודה צפה."

fi


# האם הקלט הוא מספר שלם?

if [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; ואז הד "'$REPLY' הוא מספר שלם."

אחר

echo "'$REPLY' אינו מספר שלם."

#! / bin / bash

# read-validate: validate input invalid_input () {

echo "קלט לא חוקי '$REPLY'" >&2 יציאה 1

}


קרא -p "הזן פריט בודד > "


קלט אחד ריק (לא חוקי)

[[ -z $REPLY ]] && invalid_input


קלט אחד הוא מספר פריטים (לא חוקי)

(( $(echo $REPLY | wc -w) > 1 )) && invalid_input


# האם הזנת שם קובץ חוקי?

if [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; ואז הד "'$REPLY' הוא שם קובץ חוקי."

if [[ -e $REPLY ]]; לאחר מכן

echo "וקובץ '$REPLY' קיים."

אחר

echo "עם זאת, הקובץ '$REPLY' אינו קיים."

fi


# האם הזנת מספר נקודה צפה?

if [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; ואז הד "'$REPLY' הוא מספר נקודה צפה."

אחר

echo "'$REPLY' אינו מספר נקודה צפה."

fi


# האם הקלט הוא מספר שלם?

if [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; ואז הד "'$REPLY' הוא מספר שלם."

אחר

echo "'$REPLY' אינו מספר שלם."

אימות קלט


פי אחר

echo "המחרוזת '$REPLY' אינה שם קובץ חוקי."

fi

פי אחר

echo "המחרוזת '$REPLY' אינה שם קובץ חוקי."

fi


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

&&, ואם, כמו גם מנה בריאה של ביטויים רגולריים.


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