<Попередній | зміст | Наступна>
Підводячи підсумки
З додаванням позиційних параметрів тепер ми можемо писати досить функціональні скрипти. Для простих завдань, що повторюються, позиційні параметри дозволяють писати дуже корисні функції оболонки, які можна розмістити в .bashrc файлу.
наш сторінка sys_info Програма стала більш складною та витонченою. Ось повний список із виділеними останніми змінами:
#! / бін / баш
# sys_info_page: програма для виведення сторінки системної інформації
PROGNAME=$(базова назва $0)
TITLE="Звіт про системну інформацію для $HOSTNAME" CURRENT_TIME=$(дата +"%x %r %Z")
TIMESTAMP="Створено $CURRENT_TIME, $USER"
report_uptime () { cat <<- _EOF_
Час роботи системи
$(час роботи)
_EOF_ повернення
#! / бін / баш
# 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 () {
якщо [[ $(id -u) -eq 0 ]]; потім кіт <<- _EOF_
Використання домашнього простору (всі користувачі)
$(du -sh /home/*)
_EOF_
ще
кіт <<- _EOF_
Використання домашнього простору ($USER)
$(du -sh $HOME)
_EOF_
fi повернення
}
використання () {
echo "$PROGNAME: використання: $PROGNAME [-f файл | -i]" повернення
}
write_html_page () { cat <<- _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(час роботи звіту)
$(report_disk_space)
$(report_home_space)
_EOF_ повернення
}
# параметри командного рядка процесу
}
report_disk_space () { cat <<- _EOF_
Використання дискового простору
$(df -h)
_EOF_ повернення
}
report_home_space () {
якщо [[ $(id -u) -eq 0 ]]; потім кіт <<- _EOF_
Використання домашнього простору (всі користувачі)
$(du -sh /home/*)
_EOF_
ще
кіт <<- _EOF_
Використання домашнього простору ($USER)
$(du -sh $HOME)
_EOF_
fi повернення
}
використання () {
echo "$PROGNAME: використання: $PROGNAME [-f файл | -i]" повернення
}
write_html_page () { cat <<- _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(час роботи звіту)
$(report_disk_space)
$(report_home_space)
_EOF_ повернення
}
# параметри командного рядка процесу
Підводячи підсумки
інтерактивний=
ім'я файлу=
в той час як [[ -n $1 ]]; зробити кейс 1 дюйм
-f | --файл)
зсув
ім'я файлу=$1
;;
інтерактивний=
ім'я файлу=
в той час як [[ -n $1 ]]; зробити кейс 1 дюйм
-f | --файл)
-я | --interactive) interactive=1
;;
-h | --help) вихід із використання
;;
*) використання >&2
вихід 1
;;
esac shift
зроблений
# інтерактивний режим
якщо [[ -n $interactive ]]; тоді поки правда; робити
read -p "Введіть ім'я вихідного файлу: " ім'я файлу, якщо [[ -e $filename ]]; тоді
read -p "'$filename' існує. Перезаписати? [y/n/q] > " case $REPLY в
Y|y) розрив
;;
Q|q) echo "Програма завершена." вихід
;;
*) продовжити
;;
що С
elif [[ -z $filename ]]; потім продовжуйте
ще
перерву
fi
зроблений
fi
# вихідна html-сторінка
якщо [[ -n $filename ]]; тоді
якщо торкніться $filename && [[ -f $filename ]]; потім write_html_page > $filename
ще
-я | --interactive) interactive=1
;;
-h | --help) вихід із використання
;;
*) використання >&2
вихід 1
;;
esac shift
зроблений
# інтерактивний режим
якщо [[ -n $interactive ]]; тоді поки правда; робити
read -p "Введіть ім'я вихідного файлу: " ім'я файлу, якщо [[ -e $filename ]]; тоді
read -p "'$filename' існує. Перезаписати? [y/n/q] > " case $REPLY в
Y|y) розрив
;;
Q|q) echo "Програма завершена." вихід
;;
*) продовжити
;;
що С
elif [[ -z $filename ]]; потім продовжуйте
ще
перерву
fi
зроблений
fi
# вихідна html-сторінка
якщо [[ -n $filename ]]; тоді
якщо торкніться $filename && [[ -f $filename ]]; потім write_html_page > $filename
ще
echo "$PROGNAME: Неможливо записати файл '$filename'" >&2 вихід 1
fi ще
write_html_сторінка
fi
echo "$PROGNAME: Неможливо записати файл '$filename'" >&2 вихід 1
fi ще
write_html_сторінка
fi
Ми ще не закінчили. Є ще багато речей, які ми можемо зробити та покращити.