סיכום
עם תוספת של פרמטרים מיקומיים, אנו יכולים כעת לכתוב סקריפטים פונקציונליים למדי. עבור משימות פשוטות שחוזרות על עצמן, פרמטרים מיקוםיים מאפשרים לכתוב פונקציות מעטפת שימושיות מאוד שניתן למקם במשתמש .bashrc קובץ.
את העתיד sys_info_page התוכנית גדלה במורכבות ובתחכום. הנה רשימה מלאה, עם השינויים האחרונים מודגשים:
#! / bin / bash
# sys_info_page: תוכנית לפלט דף מידע מערכת
PROGNAME=$(שם בסיס $0)
TITLE="דוח מידע מערכת עבור $HOSTNAME" CURRENT_TIME=$(תאריך +"%x %r %Z")
TIMESTAMP="נוצר $CURRENT_TIME, על ידי $USER"
report_uptime () { cat <<- _EOF_
רציף של מערכת
$(זמן פעילות)
_EOF_ לחזור
#! / bin / bash
# sys_info_page: תוכנית לפלט דף מידע מערכת
PROGNAME=$(שם בסיס $0)
TITLE="דוח מידע מערכת עבור $HOSTNAME" CURRENT_TIME=$(תאריך +"%x %r %Z")
TIMESTAMP="נוצר $CURRENT_TIME, על ידי $USER"
report_uptime () { cat <<- _EOF_
רציף של מערכת
$(זמן פעילות)
_EOF_ לחזור
}
report_disk_space () { cat <<- _EOF_
ניצול שטח דיסק
$(df -h)
_EOF_ לחזור
}
report_home_space () {
if [[ $(id -u) -eq 0 ]]; ואז חתול <<- _EOF_
ניצול שטח ביתי (כל המשתמשים)
$(du -sh /home/*)
_EOF_
אחר
חתול <<- _EOF_
ניצול שטח ביתי ($USER)
$(du -sh $HOME)
_EOF_
fi לחזור
}
שימוש () {
echo "$PROGNAME: שימוש: $PROGNAME [-f file | -i]" חוזר
}
write_html_page () { חתול <<- _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(report_uptime)
$(report_disk_space)
$(report_home_space)
_EOF_ לחזור
}
# אפשרויות שורת הפקודה תהליך
}
report_disk_space () { cat <<- _EOF_
ניצול שטח דיסק
$(df -h)
_EOF_ לחזור
}
report_home_space () {
if [[ $(id -u) -eq 0 ]]; ואז חתול <<- _EOF_
ניצול שטח ביתי (כל המשתמשים)
$(du -sh /home/*)
_EOF_
אחר
חתול <<- _EOF_
ניצול שטח ביתי ($USER)
$(du -sh $HOME)
_EOF_
fi לחזור
}
שימוש () {
echo "$PROGNAME: שימוש: $PROGNAME [-f file | -i]" חוזר
}
write_html_page () { חתול <<- _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(report_uptime)
$(report_disk_space)
$(report_home_space)
_EOF_ לחזור
}
# אפשרויות שורת הפקודה תהליך
סיכום
אינטראקטיבי=
שם קובץ=
while [[ -n $1 ]]; עשה מקרה $1 אינץ'
-f | --קוֹבֶץ)
משמרת
שם קובץ=$1
;;
אינטראקטיבי=
שם קובץ=
while [[ -n $1 ]]; עשה מקרה $1 אינץ'
-f | --קוֹבֶץ)
-י | --אינטראקטיבי) אינטראקטיבי=1
;;
-h | --help) יציאה מהשימוש
;;
*) שימוש >&2
צא מ- 1
;;
משמרת esac
עשה
# מצב אינטראקטיבי
if [[ -n $אינטראקטיבי ]]; ואז בעוד אמת; לַעֲשׂוֹת
read -p "הזן את שם קובץ הפלט: "שם הקובץ אם [[ -e $filename]]; לאחר מכן
קרא -p "'$filename' קיים. להחליף? [y/n/q] > " מקרה $REPLY ב
Y|y) הפסקה
;;
Q|q) הד "התוכנית הסתיימה." יְצִיאָה
;;
*) להמשיך
;;
esac
elif [[ -z $filename]]; ואז להמשיך
אחר
לשבור
fi
עשה
fi
# פלט דף HTML
if [[ -n $filename ]]; לאחר מכן
אם גע ב-$filename && [[ -f $filename]]; ואז write_html_page > $filename
אחר
-י | --אינטראקטיבי) אינטראקטיבי=1
;;
-h | --help) יציאה מהשימוש
;;
*) שימוש >&2
צא מ- 1
;;
משמרת esac
עשה
# מצב אינטראקטיבי
if [[ -n $אינטראקטיבי ]]; ואז בעוד אמת; לַעֲשׂוֹת
read -p "הזן את שם קובץ הפלט: "שם הקובץ אם [[ -e $filename]]; לאחר מכן
קרא -p "'$filename' קיים. להחליף? [y/n/q] > " מקרה $REPLY ב
Y|y) הפסקה
;;
Q|q) הד "התוכנית הסתיימה." יְצִיאָה
;;
*) להמשיך
;;
esac
elif [[ -z $filename]]; ואז להמשיך
אחר
לשבור
fi
עשה
fi
# פלט דף HTML
if [[ -n $filename ]]; לאחר מכן
אם גע ב-$filename && [[ -f $filename]]; ואז write_html_page > $filename
אחר
echo "$PROGNAME: לא ניתן לכתוב את הקובץ '$filename'" >&2 יציאה 1
פי אחר
write_html_page
fi
echo "$PROGNAME: לא ניתן לכתוב את הקובץ '$filename'" >&2 יציאה 1
פי אחר
write_html_page
fi
עוד לא סיימנו. יש עוד דברים שאנחנו יכולים לעשות ושיפורים שאנחנו יכולים לעשות.