Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
02.05.2014
Размер:
1.46 Mб
Скачать

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

Каждая запущенная из командного интерпретатора программа получает три открытых потока ввода/вывода:

Стандартный ввод

Стандартный вывод

Стандартный вывод ошибок

По умолчанию все эти потоки ассоциированы с терминалом. Т.е. любая программа, использующая только стандартные потоки, будет ожидать ввода с клавиатуры терминала, весь вывод этой программы, включая сообщения об ошибках, будет происходить на экран терминала. Shell позволяет перенаправлять потоки ввода/вывода. Можно подавить вывод сообщений об ошибках, установить ввод или вывод из файла и даже передать вывод одной программы на ввод другой.

  • File – перенаправление стандартного потока вывода в файл

>> Fail – добавление в fail данных из стандартного потока вывода.

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

P1| P2 – передача стандартного потока вывода программы P1в поток ввода P2.

N > fail – переключение потока вывода из файла с дескриптором N в файл fail

N2 > fail – тоже, но записи добавляются в файл fail.

Стандартным потокам ввода, вывода и вывода ошибок присваиваются десктипторы – числовые значения, являющиеся указателями на соответствующий поток. Они, соответственно, равны 0,1 и 2. Перенаправлять потоки можно, используя эти числовые значения.

Например, чтобы подавить вывод ошибок, можно использовать следующую запись:

$ run 2 > /dev/ nul (псевдо устройство, удаляющее все введенные в него символы)

Все команды, которые вводятся в строке приглашения Shell, относятся к одной из следующих категорий:

  1. Встроенные функции

  2. Функции Shell, определенные пользователем

  3. Внешние программы и утилиты

Запуск встроенной функции не требует порождения нового процесса, поскольку эта функция реализована в самой программе Shell.

Важнейшие встроенные функции Shell:

: - пустая команда. Она удобна для создания бесконечных циклов:

while:

do

……

done

break [N] – производит выход из цикла for или while.

Если параметр

break [N]

производит выход из цикла for или while.

Если параметр указан, происходит выход из и выполненных циклов.

cd [dir]

переход в каталог dir

echo[string]

строка string выводиться на терминал

exec run-me

выполняем программу runme

exit

завершает работу интерпретатора

jobs

вывод списка текущих заданий

pwd

выводит имя текущего каталога

return

осуществляет вывод и зфункци

set

выводит список определенных переменных

test

вычисляет условное выражение

times

выводит суммарное время использования процессора программами

type name

показывает как name будет интерпретироваться Shell

и ряд других.

Синтаксис функции определенный пользователем имеет вид:

function ( )

{

command 1

command 2

………..

}

т.е. телом функции является

обычный

sprint shell

таким образом, пользователь может определить функцию команд­ного интерпретатора и использовать ее как встроенную функцию Shell.

Пример.

Функция mcd, которая позволяет отобразить в применении Shell имя текущего каталога.

mcd ()

{ cd $* - передача аргументов запущенного скрипта

единым словом

PS1=’pwd’

}

В командной строке Shell можно запустить сразу несколько команд:

$pwd; date.

Можно запустить программу в фоновом режиме. В этом слу­чае Shell не будет ждать завершения программы, а сразу выведет приглашение. Для этого строку команды необходимо завершить символом ‘&’.

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

cmd1 && cmd2.

В качестве примера приведу поле имени пользователя в файле паролей и в случае успеха – поле его имени в файле групп:

$grep sergey/etc/paсswd && grep sergey/etc/group.

Можно назначить выполнение команды только в случае не­удачного завершения предыдущей. Для этого команды следует раз­делить двумя символами “|”:

$cmd1 || echo Команда завершилась неудачно.

Язык Shell позволяет осуществлять ветвление программы с помощью оператора if.

Синтаксис этого оператора следующий:

if условие

then

command1 Эти команды будут выполнены если

command2 истинно условие.

-------------

fi

Язык программирования Shell имеет также несколько опера­торов цикла:

1) while условие

do

command1

command2

-------------

done

2) until условие

do

command1

command2

-------------

done

  1. for var in список

do

command1

command2

-------------

done

С помощью оператора while команды command1, command2 и т.д. будут выполняться пока условие не станет ложным.

С помощью оператора until команды command1, command2 и т.д. будут выполняться пока условие не станет истинным.

Оператор for обеспечивает выполнение цикла столько раз, сколько слов в списке. При этом переменная var последовательно принимает значения, равные словам из списка. Список может фор­мироваться различными способами, например, как вывод некоторой команды.

Shell файл или командный файл или скрипт можно создать и выполнить несколькими способами, например с помощью команды cat

cat > text.sh

далее нужно записать команды файла, нажав в конце каждой строчки клавишу «ENTER», а затем Ctrl-D, чтобы закончить текст.

Можно создать скрипт с помощью текстового редактора

$VI text.sh

Созданный командный файл можно вызвать на выполнение как процедуру командного интерпретатора, командой sh с аргумен­том – именем скрипта.

$ sh text.sh

Команда sh вызовет файл и выполнит его команды.

Этот скрипт можно выполнить иначе: нужно объявить его вы­полняемым с помощью команды изменения прав доступа chmod:

$ chmod u+x text.sh

Теперь можно выполнить команды файла text.sh как обычную программу:

$ text.sh

еще один вариант – начать текст скрипта со строки:

#!/bin/sh.

Соседние файлы в папке Операционные системы