double arrow

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

Три направления ввода-вывода являются выделенными - стандартный ввод, вывод и поток ошибок (stdin, stdout, stderr). По умолчанию, все три потока связаны (ассоциированы) с терминалом. При этом программа выводит все свои сообщения в том числе и об ошибках на терминал. Shell позволяет перенаправить эти стандартные потоки, установить ввод-вывод и объединение потоков.


Перенаправление потоков ввода-вывода.


>file Перенаправление стандартного потока вывода в файл file


>>file -Перенаправление стандартного потока вывода в файл file с добавлением в конец файла.


<file -получение стандартного потока ввода из файла file.


prog1 | prog2 -Передача выходного потока программы prog1 во входной поток программы prog2.


n>file -Перенаправление стандартного потока с дескриптором n в файл file.


n>>file -Перенаправление стандартного потока с дескриптором n в файл file с добавлением в конец файла.


n>&m -Объединение потоков с дескрипторами n и m.

Пример:

$ prog1 >/dev/null 2>&1


/dev/null - это псевдоустройство, которое уничтожает направленный в него поток.


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

$ gzip -d archive.tar.gz | tar –xf

Здесь происходит разархивация файла archive.tar.gz, запакованного двумя архиваторами. Выходной поток от утилиты gzip передается во входной поток утилите tar. Аналогично эту же операцию можно было выполнить и по другому:


$ gzip -d archive.tar.gz

$ tar -xf archive.tar


Поскольку язык Bourne Shell является процедурным языком программирования, в нем также как и в других подобных языках есть операторы, позволяющие управлять последовательностью выполнения команд. Необходимым оператором является проверка некоторого условия, в зависимости от выполнения которого определяется дальнейший ход программы. Таким оператором является команда test. Эта команда проверяет выполнение некоторого условия. У команды test существует два варианта вызова:


test условие


или

[ условие ]


Следует отметить, что между скобкой и условием необходимо наличие пробелов, иначе Shell не сможет опознать "[" как команду test. При успешном завершении test возвращает "0".

Условия проверки файлов:

-f file Файл "file" является обычным файлом.

-d file Файл " file" является каталогом.
-c file Файл "file" является специальным файлом.
-r file Файл "file" имеет разрешение на чтение.

-w file Файл "file" имеет разрешение на запись.

-x file Файл "file" имеет разрешение на исполнение.

-s file Файл "file" не пустой.

Условия проверки строк:


string1=string2 Строки string1 и string2 совпадают.


string1!=string2 Строки string1 и string2 не совпадают.


-n string1 Строка string1 существует.

-z string1 Строка string1 не существует.


Условия операций с целыми числами:


x -eq y x равно y


x -ne y x не равно y

x -gt y x больше y


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


x -lt y x меньше y


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


В этом случае команда test воспринимает строки именно как целые числа. Нулевому значению так же соответствует пустая строка.

Логические операции в контексте test

! (not) Логическое "НЕ"


-o (or) Логическое "ИЛИ"

-a (and) Логическое "И"

Условный оператор "if "

Общий вид использования условного оператора if представляется следующим образом:


if <условие>

then <список команд>

[ elif <условие>

then <список> ]

[else <список> ]

Fi


Выражения, выделенные в квадратных скобках, являются необязательными. Т.е. можно представить наиболее употребительную "порезанную" модификацию условного оператора:


if <условие>

then <список команд>

fi


В этом случае если <условие> выполнено (код завершения 0) то выполняется <список команд>. В противном случае <список команд> пропускается.

Оператор выбора case

В общем случае синтаксис оператора case выглядит следующим образом:


case <строка> in


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



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