Администрирование локальных сетей
Рефераты >> Программирование и компьютеры >> Администрирование локальных сетей

2.2.1.5 Shell скрипты

Выполнение скриптов.

Несколько команд обьедененных одной последовательностью выполнения называется скриптом. Например последовательное выполнения команд, пайпы являются простейшими скриптами. Обычно команды из которых состоят скрипты сохраняют в файлах. Для запуска скрипта можно воспользоваться двумя методами:

sh <имя_файла_скрипта>

или установить атрибут выполняемости на файл командой

chmod +x <имя_файла_скрипта>

После чего можно выполнять скрипт:

./<имя_файла_скрипта>

Вывод текста.

Для формирования вывода текстовой информации в скриптах используют команду

echo “строка”

Файл .profile .

Каждый раз во время входа в систему Bourne Shell автоматически запускает файл .profile (скрипт) находящийся в вашей домашней директории. Этот скрипт устанавливает “окружение” в котором Вам предстоит работать. Это различные переменные окружения отвечающие за вид системной подсказки, путь поиска исполняемых файлов, тип терминала и.т.п. Приведем список основных переменных окружения.

· PATH устанавливает путь поиска исполняемых файлов и представляет собой набор директорий разделенных двоеточием

· MAIL определяет имя файла почтового ящика для уведомления о приходе новой электронной почты

· MAILCHECK параметр показывающий как часто (в секундах) следует проверять почтовый ящик на предмет прихода новой почты

· HOME определяет домашний каталог (каталог по умолчанию). Команда cd без параметров выполняет переход в этот каталог.

· PS1 основная системная подсказка (по умолчаию $)

· PS2 вторичная системная подсказка (по умолчанию >)

· SHELL имя логин шелла пользователя

· TERM тип терминала пользователя

· EDITOR имя текстового редактора по умолчанию

Устанавливать переменные окружения можно по разному. Например команды

PATH=/bin:/usr/bin:/usr/sbin:/usr/contrib/bin:/usr/local/bin

и

PATH=/bin:/usr/bin:/usr/sbin

PATH=$PATH: :/usr/contrib/bin:/usr/local/bin

полностью эквивалентны. Для того чтобы эти переменные вошли в системное окружение (кроме шела, стали доступны и другим программам) необходимо выполнит команду

export <имя_переменной>

Комментарии.

Текст следующий за символом # рассматривается шелом как комментарий и не оказывает никакого влияния на работу скрипта.

Основы программирования на языке shell

Параметры.

В дополнение к стандартным параметрам шела можно создавать свои параметры, кторые затем можно использовать в командах. Например

$ x=test

$ echo $x

test

$ aaa=/

$ ls $aaa

cdrom home nsmail tcb var

SD_CDROM dev lib opt tmp

TT_DB etc lost+found sbin tmp_mnt

Bin export net stand usr

При включении параметров в строку или в выражение знак $ должен предшествовать параметру. Также необходимо пользоваться следующими правилами:

${parameter} значение параметра заключенного в скобки будет использовано в выражении. Скобки {} используются когда за параметром следуют буквы или цифры не относящиеся к парамаметру. Например если значение параметра xxx равно test то значение выражения ${xxx}123 будет равняться test123

${parameter:-word} если параметр установлен и не пустой то результатом выражения будет являться значение параметра, в противном случае в результате будет использовано значение параметра word. Например: ${xxx:-/usr/bin/sh}

если xxx пустой то результатом выражения будет являться строка /usr/bin/sh

${parameter:=word} если параметр неустановлен или пустой, тогда значение word будет результатом выражения.

${parameter:+word} если параметр установлен и не пустой, тогда результатом выражения является word, в противном случае результат пустой.

Аргументы командной строки.

Когда Вы запускаете на выполнение программы, Вы можете передавать ей один или больше аргументов. Шелл скрипты имеют доступ к этим аргументам посредством параметров $0, $1, $2 …$9. Если аргументов больше девяти, их значения помещаются в буффер и могут быть доступны с использованием команды shift которая будет обсуждаться ниже. Параметр $0 всегда принимает значение имени выполняемого файла, $1 – первого аргумента командной строки, $2 – второго, и.т.п.

Количество агрументов командной строки всегда можно узнать проанализировав параметр $#. В том случае если Вам необходим один параметр содержащий все аргументы командной строки разделенные пробелом нужно воспоьзоваться параметром $*.

Для получения доступа к аргументам с номером больше девяти необходимо воспользоваться командой shift. После очередного выполнения команды shift происходит сдвиг на один элемент в буффере параметров в результате которого значение параметра $2 получает параметр $1, значение параметра $3 получает $2, и.т.п. Используя цикл (цыклы будут рассвотрены ниже) в сочетании с командой shift можно получать доступ ко всем аргументам командной строки с номерами превышающими 9.

Квотинг.

Очень часто случаются ситуации когда необходима особая трактовка тех символов которые шелл воспринимает как спец символы. Например случай когда строку текста включая пробелы нужно передать как один аргумент или знак $ должен не быть воспринят как указатель на параметр. Для этих целей используется квотинг (quoting).

Например символ бекслэша ( \ ) можно использовать для квотинга символа $.

$ param=aaa

$ echo $param

aaa

$ echo \$param

$param

В сочетании с бекслэшем для квотинга можно использовать двойные кавычки. Например:

echo "$param is a \"new directory\""

aaa is a "new directory"

При этом знак $ внутри двойных кавычек интерпретируется как указатель на параметр а бэкслэш используется для “экранирования” внутренних кавычек.

Одинарные кавычки также можно использовать для квотинга но в отличии от двойных они “экранируют” все что находится внутри них. Разница сразу становится понятной после замены в предыдущем примере двойных кавычек однираными:

$ echo '$param is a \"new directory\"'

$param is a \"new directory\"

Подстановка команд.

Символ обратного ударения ( ` ) используемый в скриптах указывает на подстановку команд. Это подразумевает что результат вывода команды подставляется в шелл как параметр. Нпример:

$ echo "The current date is `date`"

The current date is Sat Jan 6 04:16:35 GMT 2001

или

$ users=`who`

$ echo "Users currentrly logged in the system:\n $users"

Users currentrly logged in the system:

root console Jan 6 03:57

roman pts/0 Jan 5 23:12

Условия.

Очень часто случаются ситуации при написании скриптов когда необходимо выполнять те или иные команды в зависимости от конкретных условий.

Например, нужно отсортировать файл, а в случае его отсутствия вывести сообщение об ошибке. На этот случай шелл имеет условный оператор, и указанная задача решается с его использованием следующим образом:


Страница: