Операционная система UNIX
Шрифт:
Значение
В случае, когда скрипт вызван с параметром
Ввод
Как мы уже видели, присвоение значений переменным может осуществляться явно или с помощью вывода некоторой программы. Команда read предоставляет удобный способ присвоить переменным значения, считанные из стандартного потока ввода. Это может быть строка, введенная пользователем или считанная из файла в случае перенаправления потока.
Команда read считывает строку из стандартного потока ввода и последовательно присваивает переменным, переданным в качестве параметров, значения слов строки. Если число слов в строке превышает число переменных, то в последней переменной будут сохранены все оставшиеся слова. Продемонстрируем это на простом примере:
Текст скрипта test5.sh:
Запуск скрипта
В приведенном примере read в цикле считывает пользовательский ввод. Цикл завершается, когда достигнут конец файла (что эквивалентно пользовательскому вводу <Ctrl>+<D>), поскольку при этом read возвращает неудачу (код возврата равен 1) и while завершает работу. В первом цикле число введенных слов превышает количество переменных, поэтому значение переменной
Система управления заданиями
Командный интерпретатор может поддерживать управление заданиями. Для Bourne shell (/bin/sh), который мы рассматриваем, систему управления заданиями включает парный ему интерпретатор /bin/jsh. В остальном этот интерпретатор имеет те же возможности.
В системе управления заданиями каждая команда (простая или составная), которую пользователь запускает
со своего терминала, называется заданием. Все задания могут выполняться либо в текущем режиме, либо в фоновом режиме, либо быть приостановлены. Задание в каждом из этих состояний обладает рядом характеристик:Состояние задания | Характеристики |
---|---|
Выполняется в текущем режиме | Задание может считывать данные и выводить данные на терминал пользователя |
Выполняется в фоновом режиме | Заданию запрещен ввод с терминала. Возможность вывода на терминал определяется дополнительными установками |
Приостановлено | Задание не выполняется |
Каждое задание при запуске получает уникальный идентификатор, называемый номером задания, который используется в командах системы управления. Синтаксис номера задания, применяемый в командах:
где
% или + | Текущее задание — самое последнее запущенное или вновь запущенное задание |
– | Предыдущее задание (по отношению к текущему) |
?строка | Задание, для которого строка присутствует в командной строке запуска |
n | Задание с номером n |
pref | Задание, на которое можно уникально указать префиксом pref , например, команда ls(1), запущенная в фоновом режиме, адресуется заданием %ls |
Система управления заданиями позволяет использовать следующие дополнительные команды:
bg [%jobid] | Продолжает выполнение остановленного задания в фоновом режиме. Без параметра относится к текущему заданию. |
fg [%jobid] | Продолжает выполнение остановленного задания в текущем режиме. Если задание jobid выполнялось в фоновом режиме, команда перемещает его в текущий режим. |
jobs [-p | -l] [%jobid ... ] | Выводит информацию об остановленных и фоновых заданиях с указанными номерами. Если последний аргумент опущен, выводится информация обо всех остановленных и фоновых заданиях. Приведенные ниже опции изменяют формат вывода: – l Вывести идентификатор группы процессов и рабочий каталог. – р Вывести только идентификатор группы процессов. |
kill [-signo] %jobid | Обеспечивает те же возможности, что и команда kill(1), но по отношению к заданиям. |
stop %jobid | Останавливает выполнения фонового задания. |
wait %jobid | Ожидает завершения выполнения задания jobid и возвращает его код возврата. |
Приведенный ниже пример иллюстрирует использование команд управления заданиями и не нуждается в комментариях:
- Telegram
- Viber
- Skype
- ВКонтакте