Поблочный и побайтовый режимы управления файлами, страница 7

ошибке, если использовать знак  "2>" или "2>>" соответственно.

.

                                                    VII.

             Оболочки ОС. Командные файлы. Профайл.

Команды ОС UNIX выполняются специальным интерпретатором, названным ОБОЛОЧКА. Интерпретатор анализирует команды, их опции и вводимые вместе с командой данные, и после проверки их синтаксиса и прав на запуск команды (устанавливаемых командой CHMOD) запускает их на выполнение. Обычно SHELL – это последовательность команд, опций и аргументов, разделенных пробелами. Первое слово определяет имя выполняемой программы (в, точнее, маршрут к соответствующему файлу), а оставшиеся слова передаются команде в виде аргументов. Как и во всякой программе, создаваемой любым компилятором, коанды – это обычные знаковые цепочки.

Команда может быть обычной программой, содержащей команды того процессора, на котором она выполняется, и поля данных в форматах, определяемых используемым процессором. Такие программы хранятся в виде обычных выполняемых файлов и интерпретатор запускает их в обычном в таком случае порядке.

Однако SHELL идет дальше, обеспечивая написание сценария, который обеспечивает запуск определенных программ в виде последовательности, описывающей достаточно сложную логику запуска отдельных программ (циклы, обеспечивающие повторение отдельных программ или групп программ, ключи – switch- запускающие одну из программ при определенном условии). С помощью этой логики в SHELL в SHELL может быть создан определенный сценарий (SCRIPT) реализующий из готовых программ некоторую комплексную программу. Особенность этой программы в том, что это обычный текстовый файл. Но перед запуском он должен получить с помощью команда CHMOD статус выполняемой (+Х). Вторая особенность состоит в том, что данные в скрипт попадают только В ВИДЕ ЦЕПОЧЕК ЗНАКОВ через стандартный вход STDIN, а выдаются только на стандартный выход STDOUT.

В UNIX имеется 4 вида 4 вида оболочек, используемых для разных целей. Мы рассмотрим наиболее широко используемую оболочку BOURNE AGAIN SHELL (BASH), подробное описание которой имеется во многих руководствах и, в частности, в книге С. Дунаева «UNIX» Server. Из-во «МИФИ» 2000. (стр. 181 - 195).

Как в любом языке программирования, в SHELL существуют переменные, которые можно определять и присваивать им значения. Имя переменной должно начинаться с буквы или с символа подчеркивания. Пробелы или другие знаки недопустимы: .size – недопустимо, т.к. начинается с точки.

Groops name – недопустимо, т.к. содержит пробел.

Значения переменным присваивают команды присваивания  ( = ):

Var=length

Length=80 , т.е. var=80

Если среди присваиваемых значений есть пробелы, то двойные кавычки обязательны.

Чтобы получить доступ к переменной, ее надо использовать в сценарии со знаком доллара:

         Var=80

         Echo $var   (на экран будет выведено число 80).

Переменные удобны, чтобы сокращать длинные имена:

File=”usr/home/export/aids.me,”

Cat $file – ввели полный маршрут.

Специальный символ * :

$echo * - аналогично выполнению команды ls.

но

$echo “*” – дает на выводе звездочку, т.е. при этом любой специальный символ утрачивает свой специальный статус и будет выведен просто как знак. Исключения составляют $, обратный апостроф (‘) и обратная косая черта (\), если они предшествуют специальному символу:

$mess=”Hello, baby!”

$echo $mess или $echo ”$mess” – дадут одинаковый результат.

Для обратной косой черты: $echo \$mess аналогично $mess

                          $echo \\ аналогично \.

\n – переход на следующую строку.   

\c – оставить на прежней строке.

\t – символ табуляции.

Апостроф работает аналогично обратной косой черте.

Обратный апостроф (`) необходим, т.к. если в него заключить команду с операндами, то она будет выполнена ТОЧНО как команда:

$echo “The date is `date`”  à The date is Mon Oct 31 11:45:24 EST 1994

Переменные в SHELL, вводимые с командной строки, кодируются так, что номером программы будет $0, 1-ый операнд - $1 и т.д. до $9.

Однако

$# - задает число операндов в командной строке.

$* - задает значения этих операндов.

Т.о. с помощью операций цикла можно выбрать практически любое количество операндов из командной строки.

Наделяет переменные позиционными номерами команда SET. Если эти номера больше 9, то при работе можно использовать команду SHIFT, которая сдвигает эти позиционные номера, т.е. смещает после использования на место $1 значение $2 и т.д.

В SHELL выполняются все конвейерные операции (включая переназначение ввода-вывода).

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

Again=yes

While[“$again=yes”]  #в [ ] задан эквивалент команды TEST

do

  echo –n “Please, enter a name”

  read name

  echo “The name is $name”

  echo “Do you wish cjntinue?Y/N”

  read again

done

Рассмотрим в качестве примера ввод на директорию SOURCE всех файлов с расширением *.с:

for backfile in *.c

do

  cp $backfile source/$backfile

  echo $backfile

done

Пример вывода на экран всех каталогов и подкаталогов текущего каталога дан в книге С. Дунаева (стр. 197). Обратите внимание на то, что этот скрипт выполнен как рекурсивная функция.

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

echo S.List Sizes

echo l.List All Size Information

echo c.List C files

echo –n “Please, enter choice”

read choice

case $choice in

  s) ls –s;;

  l) ls –l;;

  c) ls *.c;;

  *) echo Invalid Option;;

esac