Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционная система UNIX.doc
Скачиваний:
94
Добавлен:
01.05.2014
Размер:
1.67 Mб
Скачать

9.3.8. Безусловная передача управления

Команда break безусловно останавливает выполнение любого цикла, в котором он встречается и передает управление команде, следующей после ключевых слов done, fi или esac.

В предыдущем примере программы set.term вы можете использовать команду break, вместо echo, чтобы выйти из программы, как приведено в следующем примере:

Пример.

$ cat set.term<CR>

echo If you have a TTY 4420 type in 4420

echo If you have a TTY 5410 type in 5410

echo If you have a TTY 5420 type in 5420

read term

case term

in

4420)

TERM-T4

;;

5410)

TERM-T5

;;

5420)

TERM-T7

;;

*)

break

;;

esac

export TERM

echo end of programm

$

Команда continue приведет к тому, что программа немедленно перейдет к следующей итерации цикла while или for без выполнения остальных команд в цикле.

9.4. Отладка программы

Для нахождения и корректировки ошибок вам могут понадобиться две опции команды sh:

sh -v shellprogramname

печатает вводимые shell строки, как если бы они были прочитаны системой;

sh -x shellprogramname

печатает команды и их аргументы по мере их выполнения.

Для примера создадим shell программу, которая содержит ошибку:

$ cat bug<CR>

today=`date`

echo enter person

read person

mail $1

$person

When you log off once into my office olease.

$today

MLH

$

Обратите внимание, что today равно выводу команды date, которая заключена между знаками слабого ударения.

При выполнении программы bug, чтобы завершить программу, вы должны нажать клавишу BREAK или DELETE.

Чтобы отладить эту программу, попытайтесь выполнить ее с использованием sh -v. Будут напечатаны строки файла, как если бы они были прочитаны системой:

$ sh -v bug tom<CR>

today=`date`

echo enter person

enter person

read person

tom

mail $1

Обратите внимание, что вывод остановился на команде mail, т.к. здесь обнаружена ошибка. Вы должны использовать here document, чтобы перенаправить ввод в mail.

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

$ cat bug<CR>

today=`date`

echo enter person

read person

mail $1 <<!

$person

When you log off once into my office olease.

$today

MLH

!

$

Команда tee полезна при отладке конвейеров. В то время как стандартный ввод команда направляет в стандартный вывод, она сохраняет копию этого ввода в файл, имя которого дано как аргумент.

Общий формат команды tee:

command1 | tee saverfile | command2<CR>

где saverfile - это файл, который сохраняет вывод команды для анализа.

Предположим, вы хотите проверить вывод команды grep в следующей командной строке:

who | grep $1 | cut -c1-9<CR>

Вы можете воспользоваться командой tee, чтобы скопировать вывод команды grep в файл check не разрушая остальной конвейер:

who | grep $1 | tee check | cut -c1-9<CR>

Файл check содержит копию вывода grep, как показано на следующем экране:

$ who | grep mike | tee check | cut -c1-9<CR>

mike

$ cat check

mike tty61 Apr 10 10:30

$

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