Общие положения. Интерпретатор SHELL является оболочкой всей операционной системой и выполняет интерфейсные функции между пользователем и ОС

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

Помимо запуска на выполнение стандартных команд UNIX и исполняемых файлов, интерпретатор включает собственный язык, который по своим возможностям приближается к высокоуровневым языкам программирования. Этот язык позволяет создавать программы (shell-файлы, скрипты), которые могут включать операторы языка и команды UNIX. Такие файлы не требуют компиляции и выполняются в режиме интерпретации, но они должны обладать правом на исполнение (устанавливается с помощью команды chmod).

Общение пользователя с командным интерпретатором осуществляется вводом команд с клавиатуры после появления промпта (приглашения), обычно, символа '$'. Введенную последовательность символов интерпретатор будет рассматривать либо как имя внутренней команды, либо как имя исполняемого файла.

Процедуре (скрипту) shell могут быть переданы аргументы при запуске. Каждому из первых девяти аргументов ставится в соответствие позиционный параметр от $1 до $9 ($0 - имя самой процедуры), и по этим именам к ним можно обращаться из текста процедуры.

Прежде, чем начать рассмотрение некоторых операторов shell, следует обратить внимание на использование в командах некоторых символов.

\ знак отмены специального символа перевода строки, следующего непосредственно вслед за этим знаком.

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

“” двойные кавычки, используются для обрамления текста, содержащего имена переменных для подстановки ($имя) или стандартные команды, заключенные в символы тупого ударения (`команда`).

`` символы тупого ударения, служат для выполнения команды, заключенной между ними.

Кроме того, для удобства работы с файлами почти все командные интерпретаторы интерпретируют символы '?' и '*', используя их как шаблоны имен файлов (т.н. метасимволы):

? – один любой символ;

* – произвольное количество любых символов.

Например: *.c – задает все файлы с расширением "c";

pr???.* – задает файлы, имена которых начинаются с "pr", содержат пять символов и имеют любое расширение.

Рассмотрим в качестве примера использование утилиты echo, которая только и умеет, что выводить в стандартный выходной поток переданные ей аргументы. Вывод на экран содержимого текущего каталога можно осуществить так:

echo “Текущий каталог: \

`pwd` \

`ls`”

А если ввести команду

echo *.?

то будут выведены все файлы с расширением из одного символа.

Переменные языка shell

Язык shell позволяет работать с переменными (без предварительного объявления). Имена переменных начинаются с буквы и могут включать буквы и цифры. Обращение к переменным начинается со знака '$'.

Пример. Переход к начальному каталогу пользователя:

cd $HOME

Оператор присваивания. Присвоение значений переменным осуществляется с помощью оператора ‘=’ без пробелов.

Пример: s=Hello

echo $s

Вычисление выражений осуществляется с помощью команды expr и арифметических и логических операторов:

арифметические логические
+ сложение = равно
- вычитание !- не равно
\* умножение \< меньше
/ деление \<= меньше или равно
% остаток от деления \> больше
    \>= больше или равно

Результат операций сравнения - вывод 1 (true) или 0 (false). Все операторы и имена переменных должны отделяться друг от друга пробелами.

Пример.

a=5 b=12

a=’expr $a + 4’

d=’expr $b - $a’

echo $a $b $d

Будет выведено:

9 12 3

Условные выражения. Ветвление вычислительного процесса осуществляется с помощью оператора if:

if список_команд1

then список_команд2

[else список_команд3 ]

fi

Список_команд - это одна или несколько команд (для задания пустого списка используется двоеточие - ‘:’). Список_команд1 предает оператору if код возврата последней команды из списка. Если он равен 0, то выполняются команды из списка_команд2, таким образом нулевой код возврата эквивалентен значению “истина”. В противном случае выполняются команды из списка_команд3, если он существует.

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

Проверка файлов: test -ключ имя_файла

Ключи: -r файл существует и доступен для чтения;

-w файл существует и доступен для записи;

-x файл существует и доступен для исполнения;

-f файл существует и имеет тип ‘-‘, т.е. это обычный файл;

-s файл существует, имеет тип ‘-‘ и не пуст;

-d файл существует и имеет тип ‘d‘, т.е. это каталог.

Сравнение чисел: test число1 -ключ число2

Ключи: -eq равно;

-ne не равно;

-lt меньше;

-le меньше или равно;

-gt больше

-ge больше или равно.

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

test [-n] строка строка непуста;

test -z строка строка пуста;

test строка1 = строка2 строки равны;

test строка1!= строка2 строки не равны.

Построение циклов. В языке shell есть три типа циклов: while, until и for.

цикл while:

while список_команд1{;|перевод строки}

do список_команд2{;|перевод строки}

done

В условии учитывается код возврата последней выполненной команды из списка_команд1, при этом 0 интерпретируется как “истина”.

цикл until:

until список_команд1{;|перевод строки}

do список_команд2{;|перевод строки}

done

Проверка условия выполняется перед выполнением цикла. Учитывается код возврата последней выполненной команды из списка_команд1, при этом цикл выполняется до тех пор, пока код возврата не примет значение “истина”.

цикл for:

for переменная [in список_значений]{;|перевод строки}

do список_команд{;|перевод строки}

done

Переменной присваивается значение очередного слова из списка_значений и для этого значения выполняется список_команд. Количество итераций равно количеству цепочек символов в списке_значений, разделенных пробелами. Если слово in и список_значений опущены как необязательные, то переменной поочередно присваиваются значения параметров, переданных при запуске данной программы. В качестве списка можно использовать шаблоны имен файлов, тогда интерпретатор превращает этот шаблон в требуемый синтаксисом список имен файлов, удовлетворяющий шаблону.

Пример. Печать списка имен текстовых файлов из текущего каталога.

list=`ls *.txt`

for val in $list

do

echo "$val"

done


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: