15. Порядок работы shell - интерактивный (диалоговый) режим, выполнение сценариев, организация ввода-вывода. Переменные shell (в т.ч. области видимости, экспорт), типы данных. Управление выполнением сценария shell (переходы, ветвления, циклы). Арифметические и логические операции в shell. Управление выполнением внешних программ, взаимодействие с процессами и системой в сценариях shell.

Сценарий (скрипт) оболочки представляет собой текстовый файл, который задает выполнение последовательности действий. Сценарий может содержать любую последовательность команд (как внутренних команд оболочки, так и внешних команд UNIX, с аргументами или без них), вызовов программ или других написанных ранее сценариев. Про Shell можно сказать, что это и программа и язык программирования. Работа пользователя в командной сроке ничем не отличается от выполнения длинного запутанного скрипта. Механизм работы скрипта: при запуске скрипта из командной строки запускается копия интерпретатора, для которого вводом служит скрипт (как-будто пользователь сам вводил эти команды).

Структура скриптов

Переменные

Значение переменной - строка, которая передается присваиванием. V1 = 5; v2 = “string” 1 Переменной также можно присваивать значение, которое возвращается командой. V3 = pwd

Получение значения

В shell существует ряд предопределенных переменных:

В shell существует ряд переменных, которые определяются оболочкой по ходу выполнения скриптов. Это так называемые встроенные переменные:

  1. $0, $1, $2, … ,$9 значения параметров, передаваемых скрипту из командной строки.
  2. $0 - имя самого скрипта.
  3. $# - число параметров, переданных скрипту;
  4. $* - все параметры, переданные скрипту. Представляют собой единое слово, заключенное в кавычки. Существуют три вида кавычек при присваивании переменных:
    • ’ ‘ - непосредственная подстановка, например: v4=’$v1’ присвоит $v1, а не 5.
    • ” “ - подстановка после интерпретации символов \ и $. Например: v5=$v1. Переменной v5 присвоится 5. Записи без подстановочных символов эквивалентны. даст одинаковый результат. Кавычки одного вида экранируют другие.
    • ` ` - выполнение команды внутри скобок. Результат выполнения команды будет присвоен переменной.

По умолчанию все переменные локальны, то есть существуют, пока выполняется скрипт. Чтобы сделать их глобальными (для данного shell), надо задать их при помощи export. например: export v1 При выводе неопределенных переменных результатом будет пустая строка. Для удаления переменной используется unset список_переменных. Пример: $ unset $v1 $v3 $v4 Команда set выводит список всех установленных переменных shell.

Перенаправление ввода/вывода

Каждая программы, запущенная из shell, получает три открытых потока ввода/вывода, которые по умолчанию ассоциируются с терминалом.

Потоки задаются номерами(дескрипторы):

Большинство утилит Unix используют только стандартные потоки, поэтому для этих утилит можно осуществлять перенаправление.

Виды перенаправления

Шаблоны(wildcard’s, подстановочные символы)

Оболочка позволяет делать подстановку имен. Подстановочный символ заменяется оболочкой на имена файлов, если что-то в каталоге подходит под шаблон. Это полезно в случаях, когда файлов много или необходимо выбрать несколько файлов по определенному правилу.

Условное выполнение команд

Следующая удобная возможность - условное выполнение. Его суть такова: пусть ваши действия зависят от результата выполнения предыдущих. Выше уже упоминался разделитель команд ‘;’ (см. 3.2.1). Но при использовании ‘;’ последовательность команд всегда выполниться, вне зависимости от результатов работы отдельных команд (ошибок в них). Для повышения гибкости работы, в Bourne Shell существуют следующие конструкции:

Условные выражения

Синтаксис

if условие

then

else

fi

В shell true (0) и false (не 0) имеют обратные значения по сравнению с Си..

Условные выражения можно записывать в строчку, разделяя ;. Условием может быть результат команды. Часто используется test с параметрами.

Сравнение строк

Сравнение чисел

Аргументами являются $x(значение переменной) или число:

  1. $x eq $y true, если аргументы равны
  2. $x ne $y true, если аргументы не равны
  3. $x gt $y true, если значение x больше значения y
  4. $x ge $y true, если значение x больше либо равно значению y

Сложные выражения

  1. !выражение - отрицание
  2. выражение1 a выражение2 - логическое И
  3. выражение1 o выражение2 - логическое ИЛИ

Циклы

В языке shell есть несколько видов циклов. Часто употребимые из них:for, while .

Цикл for выполниться столько раз, сколько слов в списке. var последовательно принимает значения из списка. Список может формироваться вручную, как вывод команды (команда) или с помощью шаблонов.

for переменная in список

do

….

done

Цикл while выполняется, пока условие не станет ложным.

while условие

do

done

Для упорядочивания скрипта пользователь может определить функцию:

имя_функции ()

{

команды

}

Синтаксис и передача аргументов - как у скрипта.

Выполнение арифметических операций

Важное замечание. В shell выполняется только целочисленная арифметика

еxpr строка преобразует строку в число. Например: expr 23. Выполняются операции: +, -, *, /, % (деление по модулю). Их приоритет обычный.

Для плавающей точки и сложных вычислений можно использовать программу bc

Примеры:

1)a = expr $a + 3

2)b = expr 2 \* 3 - символ \ отменяет специальное значение *.