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

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


doc:sysadmin:shell_scripts

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
doc:sysadmin:shell_scripts [d.m.Y H:i] dbehterevdoc:sysadmin:shell_scripts [d.m.Y H:i] (текущий) – Статус обсуждения изменён dbehterev
Строка 1: Строка 1:
 +====== Shell (sh) и Bourn Again Shell (bash) примеры скриптов ======
  
 +===== Скрипт sh #1 - проверка условий =====
 +
 +Предположим, нам надо проверить, существует ли в системе маршрут по-умолчанию, и если не существует, выполнить какие-л. действия:
 +<code>
 +#!/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
 +</code>
 +Сначала мы перенаправляем вывод route на вход команды awk, которая проверяет соответствие строк регулярному выражению /^0/ (все, что начинается с 0 как раз и будет записью маршрута по-умолчанию) и выводит всю совпавшую строку (разделители полей в awk по-умолчанию пробелы). Т.е. если у нас есть в системе маршрут по-умолчанию, то вывод будет, в противном случае мы получим пустую строку.
 +Далее мы проверяем переменную окружения $? на предмет равенства 0. Предопределенная переменная окружения $? хранит результат выполнения последней команды, 0 возвращается в случае успеха (т.е. проверка на равенство пустой строке в нашем случае вернуло истину, 1 - в противном случае). Ну а дальше мы проверяем это условие в конструкции if then fi.
 +
 +Предположим, нам надо проверить результат выполнения команды ping - самый простой способ проверит наличие связи.
 +<code>
 +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
 +</code>
 +Мы выполняем отправку 1 эхо-пакета и дальше проверяем, содержится ли в ответе подстрока "0 received", что будет означать, что мы не получили ответ (конечно отправка 1 эхо-пакета предполагает наличие качественного канала связи, поэтому лучше увеличить значение количества отправляемых пакетов). А дальше мы проверяем, совпадает ли вывод с пустой строкой. Если не совпадает, т.е. есть строки, содержащие "0 received", значит есть проблемы и нужно что-то предпринять.
 +
 +TAG: {{tag> sysadmin shell_scripts}} 
 +
 +~~DISCUSSION:closed~~