ЗАДАНИЯ. · Изучите любой сценарий в /etc/init.d
· Изучите любой сценарий в /etc/init.d. Как используется команда case?
· Напишите сценарий, анализирующий с помощью case список пользовате- лей, находящихся в настоящий момент в системе. Если имеется хотя бы один сеанс root, должно выдаваться предупреждающее сообщение.
Циклы
В случаях, когда надо организовать последовательное выполнение одного и того же набора инструкций, удобно использовать программные циклы. Для программирования в оболочке доступны три вида циклов:
r for — эта команда позволяет создавать циклы типа перебора значений;
r while — цикл, выполняющийся до тех пор, пока истинно некоторое ус- ловие;
r until — цикл, выполняющийся до тех пор, пока некоторое условие ложно.
Допустим, что имеется набор значений, которые должны быть последова- тельно присвоены некоторой переменной, требующейся для произведения каких-либо операций. В этом случае удобно использовать команду for (при- мер 10.34).
Пример 10.34. Цикл for |
#!/bin/bash
for DIR in /etc /tmp /var do
done
echo -n "Права доступа к $DIR " ls -ld $DIR | cut -c2-11
В данном сценарии переменная DIR последовательно принимает три значе- ния: /etc, /tmp и /var. Это делает команда for, в которой список значений указан после in. Тело цикла начинается после команды do и ограничивается done.
Результат работы сценария представлен в примере 10.35.
Пример 10.35. Результаты работы цикла for |
$ ./for.sh
Права доступа к /etc rwxr-xr-x Права доступа к /tmp rwxrwxrwt Права доступа к /var rwxr-xr-x
Если в команде for не указан список значений директивой in, то переменная цикла будет принимать значения, соответствующие аргументам командной строки.
Изменим предыдущий сценарий так, чтобы имена каталогов можно было бы задавать в качестве аргументов в командной строке (примеры 10.36 и 10.37).
Пример 10.36. Перебор аргументов командной строки с помощью for |
#!/bin/bash
[ $# -lt 1 ] && exit 1 for DIR
do
if [ -d $DIR ]; then
echo -n "Права доступа к $DIR " ls -ld $DIR | cut -c2-11
elif [ ! -e $DIR ]; then
echo "$DIR не существует"
fi
done
В этом сценарии переменная DIR последовательно принимает значения аргу- ментов.
Пример 10.37. Результат перебора аргументов командной строки |
$ ./for.sh /usr /rsu /root
Права доступа к /usr rwxr-xr-x
/rsu не существует
Права доступа к /root rwx------
Для организации итеративных циклов удобно использовать команды while и
until.
Сценарий из примера 10.38 в цикле выводит значения от 1 до 5 раз в секунду
(пример 10.39).
Пример 10.38. Итеративный цикл |
#!/bin/bash
i=1
while [ $i -le 5 ]; do
echo –n $i ‘ ‘ ; sleep 1 i=$((i+1))
done echo
Пример 10.39. Результаты работы итеративного цикла |
$ ./while.sh 1 2 3 4 5
Цикл while работает до тех пор, пока команда, указанная в качестве ее аргу- мента, возвращает успешный код завершения. Наоборот, until работает, по- ка команда-аргумент заканчивается неудачей.
В качестве примера приведем сценарий, последовательно удаляющий из полного доменного имени узла (FQDN) подстроки до первой точки (при- мер 10.40). Сначала должно быть выведено полное имя узла, затем домен, потом родительский домен, и так далее, пока строка не станет пустой.
Пример 10.40. Цикл until |
#!/bin/bash HN=`hostname`
until [ -z $HN ]; do
echo $HN
HN=`echo -n $HN | tr '.' '\n' | sed '1d' | tr '\n' '.'`
done
В сценарии используется переменная HN, которой вначале присваивается зна- чение — доменное имя узла. Затем из него в цикле удаляется подстрока от начала строки до первой встретившейся точки. Для этого в строке — имени узла точки сначала заменяются переводами строк, затем удаляется первая строка, и в заключение переводы строки снова заменяются точками.
Цикл until работает до тех пор, пока содержимое переменной HN не станет пустым.
Результат работы сценария представлен в примере 10.41.
Пример 10.41. Результаты работы цикла until |
$ hostname nechto.zamislovatoe.tmn.ru
$ ./until.sh nechto.zamislovatoe.tmn.ru zamislovatoe.tmn.ru
tmn.ru ru
Дата добавления: 2015-06-12; просмотров: 646;