Инструменты пользователя

Инструменты сайта


Боковая панель

doc:sysadmin:shell_scripts

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:

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   __    ____   __ __   __    ____
  / /   / __/  / //_/  / /   /  _/
 / /__ / _/   / ,<    / /__ _/ /  
/____//___/  /_/|_|  /____//___/
 
/var/www/wiki.itcall.ru/data/pages/doc/sysadmin/shell_scripts.txt · Последние изменения: d.m.Y H:i (внешнее изменение)