Перенаправление потоков ввода-вывода
Многие команды 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
Конструкция, указанная в < > является необязательной, а выделенные полужирным курсивом элементы являются служебным словам конструкции. Служебные слова do – done определяют тело цикла.
Простейшим примером, демонстрирующим работу цикла 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!