Предположим, нам надо проверить, существует ли в системе маршрут по-умолчанию, и если не существует, выполнить какие-л. действия:
#!/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: