====== Shell (sh) и Bourn Again Shell (bash) примеры скриптов ======
===== Скрипт sh #1 - проверка условий =====
Предположим, нам надо проверить, существует ли в системе маршрут по-умолчанию, и если не существует, выполнить какие-л. действия:
#!/bin/sh
result=`/sbin/route -n | /usr/bin/awk '/^0/ {print $0}'`
/usr/bin/test "$result" = ""
# 0 - yes, we have equality, 1 - no
if [ $? -eq 0 ] # we have $result = "" that cause when Yota break down
then
# some actions
fi
Сначала мы перенаправляем вывод route на вход команды awk, которая проверяет соответствие строк регулярному выражению /^0/ (все, что начинается с 0 как раз и будет записью маршрута по-умолчанию) и выводит всю совпавшую строку (разделители полей в awk по-умолчанию пробелы). Т.е. если у нас есть в системе маршрут по-умолчанию, то вывод будет, в противном случае мы получим пустую строку.
Далее мы проверяем переменную окружения $? на предмет равенства 0. Предопределенная переменная окружения $? хранит результат выполнения последней команды, 0 возвращается в случае успеха (т.е. проверка на равенство пустой строке в нашем случае вернуло истину, 1 - в противном случае). Ну а дальше мы проверяем это условие в конструкции if then fi.
Предположим, нам надо проверить результат выполнения команды ping - самый простой способ проверит наличие связи.
ping_check=`/bin/ping -c 1 -n ya.ru`
result=`echo $ping_check | /usr/bin/awk '/0 received/ { print $0 }'`
/usr/bin/test "$result" = ""
# if we have string that contain "0 received" and it doesn't equal empty string so test return "1" - we have problem with ping
if [ $? -eq 1 ] # we have $result = "" - problem
# some actions
fi
Мы выполняем отправку 1 эхо-пакета и дальше проверяем, содержится ли в ответе подстрока "0 received", что будет означать, что мы не получили ответ (конечно отправка 1 эхо-пакета предполагает наличие качественного канала связи, поэтому лучше увеличить значение количества отправляемых пакетов). А дальше мы проверяем, совпадает ли вывод с пустой строкой. Если не совпадает, т.е. есть строки, содержащие "0 received", значит есть проблемы и нужно что-то предпринять.
TAG: {{tag> sysadmin shell_scripts}}
~~DISCUSSION:closed~~