Постоянное опробование сценария

We use cookies. Read the Privacy and Cookie Policy

В процессе разработки программ необходимо постоянно проверять их работоспособность. Запуская и тестируя программы как можно чаще, мы сможем выявить ошибки на самых ранних этапах разработки. Это существенно упрощает задачу отладки. Например, если после внесения небольших изменений и очередного запуска программы обнаружится ошибка, источник проблемы почти наверняка будет находиться в последних изменениях. Добавив пустые функции, которые на языке программистов называются заглушками, мы смогли проверить работоспособность программы на ранней стадии. Создавая заглушку, неплохо было бы включить в нее что-то, что давало бы обратную связь, позволяющую программисту оценить ход выполнения. Если сейчас взглянуть на вывод нашего сценария, можно заметить несколько пустых строк, следующих за строкой с текущим временем, но мы пока не уверены в причинах их появления.

[me@linuxbox ~]$ sys_info_page

<HTML>

<HEAD>

<TITLE>System Information Report For twin2</TITLE>

</HEAD>

<BODY>

<H1>System Information Report For linuxbox</H1>

<P>Generated 03/19/2012 04:02:10 PM EDT, by me</P>

</BODY>

</HTML>

Изменим функции, добавив в них сообщения для обратной связи:

report_uptime () {

echo "Function report_uptime executed."

return

}

report_disk_space () {

echo "Function report_disk_space executed."

return

}

report_home_space () {

echo "Function report_home_space executed."

return

}

И запустим сценарий еще раз:

[me@linuxbox ~]$ sys_info_page

<HTML>

<HEAD>

<TITLE>System Information Report For linuxbox</TITLE>

</HEAD>

<BODY>

<H1>System Information Report For linuxbox</H1>

<P>Generated 03/20/2012 05:17:26 AM EDT, by me</P>

Function report_uptime executed.

Function report_disk_space executed.

Function report_home_space executed.

</BODY>

</HTML>

Теперь можно с уверенностью сказать, что наши три функции выполняются как надо.

Теперь, когда каркас функций готов и работает, самое время добавить в них некий код. Сначала займемся функцией report_uptime:

report_uptime () {

cat <<- _EOF_

<H2>System Uptime</H2>

<PRE>$(uptime)</PRE>

EOF_

return

}

Она выглядит очень просто. Мы использовали встроенный документ для вывода заголовка раздела и результатов выполнения команды uptime, заключив их в теги <PRE>, чтобы сохранить формат вывода команды. Функция report_disk_space выглядит аналогично:

report_disk_space () {

cat <<- _EOF_

<H2>Disk Space Utilization</H2>

<PRE>$(df -h)</PRE>

_EOF_

return

}

Она получает информацию о дисковом пространстве с помощью команды df -h. Наконец, определим функцию report_home_space:

report_home_space () {

cat <<- _EOF_

<H2>Home Space Utilization</H2>

<PRE>$(du -sh /home/*)</PRE>

_EOF_

return

}

Для решения поставленной задачи мы использовали команду du с параметрами -sh. Однако это не полное решение задачи. Даже при том, что его можно использовать в некоторых системах (например, в Ubuntu), кое-где оно работать не будет. Причина в том, что во многих системах для домашних каталогов выбираются разрешения, не позволяющие читать их содержимое другим пользователям, что является вполне разумной мерой предосторожности. В этих системах функция report_home_space в том виде, в каком она написана здесь, будет работать, только если запустить сценарий с правами суперпользователя. Лучшее, что можно сделать в такой ситуации, — корректировать поведение сценария в соответствии с привилегиями пользователя, запустившего его. Мы займемся этим в главе 27.

функции командной оболочки в файле .BASHRC

Функции командной оболочки могут служить прекрасной заменой псевдонимам и в действительности считаются предпочтительным способом определения небольших команд для личного использования. Возможности псевдонимов весьма ограниченны в отношении использования некоторых видов команд и особенностей командной оболочки, тогда как функции позволяют все, что можно выразить в виде сценария. Например, если вам понравилась функция report_disk_space, созданная нами для нашего сценария, вы можете создать похожую функцию с именем ds в своем файле .bashrc:

ds () {

echo "Disk Space Utilization For $HOSTNAME"

df -h

}