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



Многие команды OС Linux используют стандартные информационные потоки для ввода данных, вывода результатов и протокола диагностики. Эти стандартные потоки обозначают дискрипторы 0 (stdin), 1 (stdout) и 2 (stderr). По умолчанию они связаны с управляющим терминалом, откуда вызвана команда. Так, стандартный входной поток stdin по умолчанию связан с клавиатурой, выходной поток stdout и поток сообщений об ошибках srderr с экраном компьютера. Командный процессор позволяет перенаправить стандартные потоки команд в файлы и программные каналы. Для этого в командной строке предусмотрено использование следующей символики перенаправления стандартных потоков:

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

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

2> file – переключение протокола стандартной диагностики в файл

>> file – добавление стандартного вывода в конец файла

2>> file – добавление протокола стандартной диагностики в конец файла

<< word – ограничение стандартного ввода заданным словом

Перечисленные операторы переключения стандартных потоков допустимо применять как по отдельности, так и комбинировать их в командной строке (один на ввод и один на вывод).

Например:

$ cat > file.txt << end

Ø Aaa

Ø bbb

Ø end       = завершение ввода (аналогично Ctrl+d)

Содержимое файла file.txt можно проверить командой

$ cat file . txt

 Его содержимое будет следующим:

Aaa

bbb

Такой же результат даст команда

$ cat << end > file . txt

Следующая команда добавит в конец файла текущую дату:

$ date >> file.txt

file.txt:

Aaa

bbb

Fri Sep 25 12:00:00 GMT+3 2015

 

Команда expr

Команда expr применяется в основном для вычисления выражений, но может быть применена и для обработки строк. Результат работы команды выводится на стандартный вывод stdout. Операнды выражения должны быть разделены пробелами, а метасимволы должны быть экранированы.

Команда имеет следующую структуру

expr< вычисляемое выражение >

В таблице 1.11 приведено описание операторов, используемых в команде expr (некоторые операторы экранированы).

 

Таблица 1.11

Операции команды expr

Оператор Описание
< выр1 > \| < выр2 > Если <выр1> не пустое и не нулевое, то возвращает его, иначе возвращает <выр2>
< выр1 > \& < выр2 > Если оба выражение непустые и ненулевые, то возвращает <выр1>, иначе возвращает 0
< выр1 > = < выр2 > < выр1 > \> < выр2 > < выр1 > \>= < выр2 > < выр1 > \< < выр2 > < выр1 > \<= < выр2 > < выр1 > != < выр2 > Возвращает результат целочисленного сравнения если оба выражения – целые; иначе возвращает результат лексического сравнения
< выр1 > + < выр2 > < выр1 > - < выр2 > Сложение и вычитание целочисленных аргументов
< выр1 > \* < выр2 > < выр1 > / < выр2 > < выр1 > % < выр2 > Умножение, деление и получение остатка от деления целочисленных аргументов
< выр1 > : < рег > Оператор сопоставления сопоставляет первый аргумент со вторым, который должен быть регулярным выражением. Обычно оператор сравнения возвращает число символов, удовлетворяющих образцу (0 при неудачном сравнении). Символы \( и \) могут применяться для выделения части первого аргумента

 

Ниже приведены некоторые примеры работы команды expr.

$ expr "$ Var_name" + 10 Если в переменной  $ Var_name  находится строка, состоящая из цифр, вернет значение записанного числа, увеличенного на 10, в противном случае укажет на ошибку.
$ expr "$ Var_name" : '.*' Возвращает количество символов в переменной Var_name; если $ Var_name=abсd, команда вернет 4;
$ expr “$filename” : '\(.*\).txt' Возвращает имя файла без расширения. Если значение переменной $filename=abc.txt, то функция вернет значение abc; если файл имеет расширение .doc, то функция вернет пустую строку, так как не найдет обязательный фрагмент .txt в имени файла.

Команда expr возвращает собственный код завершения. Команда возвращает код, равный 1, если результат проверки – истина, любое другое значение – в противном случае (следует обратить внимание, что эти коды обратны кодам завершения последней команды, заносимым в переменную ?).

Например, проверка равенства строки "Hello" переменной H="Hello" даст следующий результат:

$ H= " Hello "

$ expr $H = " Hello "

1

$ echo $?

0

$ expr $H = "Not"

0

$ echo $?

1

 

Оператор цикла с перечислением for

Оператор цикла for имеет следующую структуру:

for имя переменной < in список значений >

do

      список команд

Done

Конструкция, указанная в < > является необязательной, а выделенные полужирным курсивом элементы являются служебным словам конструкции. Служебные слова dodone определяют тело цикла.

Простейшим примером, демонстрирующим работу цикла  for, является вывод значений варьируемой переменной:

for i  in аа bb c 4

do

      echo $i

Done

В результате на экран будут выведены значения

аа

bb

c

4

 

Функции в shell

Функции используются в языке Shell для комбинации нескольких команд с целью их последующего многократного совместного использования. Формат описания функции следующий:

function function_name [ ( ) ]

{

# action

}

Круглые скобки за именем функции являются необязательными.

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

function_name A B

Поскольку все переменные в Shell не имеют области видимости, любая переменная сценария может быть использована в функции. Единственным исключением являются позиционные параметры, которые не передаются в функцию. Ими становятся становятся аргументы самой функции. Так внутри функции в переменную $1 будет занесено значение А, а в переменную $2 – В; имя функции является ее нулевым параметром $0.

 


Дата добавления: 2019-11-16; просмотров: 175; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!