Читать книгу 📗 "Операционная система UNIX - Робачевский Андрей Михайлович"
command ... ;;<i>шаблон2</i>) command ... ;;*) command ... ;;esacЗначение
<i>слово</i>state=$1set `who -r`case $state in'start') if [ $9 = "2" -o $9 = "3" ] then exit fi [ -f /usr/lib/lpshed ] && /usr/lib/lpshed ;;'stop') [ -f /usr/lib/lpshut ] && /usr/lib/lpshut ;;*) echo "usage $0 start|stop" ;;esacВ случае, когда скрипт вызван с параметром
startstopВвод
Как мы уже видели, присвоение значений переменным может осуществляться явно или с помощью вывода некоторой программы. Команда read предоставляет удобный способ присвоить переменным значения, считанные из стандартного потока ввода. Это может быть строка, введенная пользователем или считанная из файла в случае перенаправления потока.
Команда read считывает строку из стандартного потока ввода и последовательно присваивает переменным, переданным в качестве параметров, значения слов строки. Если число слов в строке превышает число переменных, то в последней переменной будут сохранены все оставшиеся слова. Продемонстрируем это на простом примере:
Текст скрипта test5.sh:
#!/bin/shecho "input: "while read var1 var2 var3do echo var1=$var1 echo var2=$var2 echo var3=$var3 echo "input: "doneЗапуск скрипта
$ <b>test5.sh</b>input: <b>пример работы команды read</b>var1=примерvar2=работыvar3=команды readinput: <b>еще пример</b>var1=ещеvar2=примерvar3=input: <b>^D</b>$В приведенном примере read в цикле считывает пользовательский ввод. Цикл завершается, когда достигнут конец файла (что эквивалентно пользовательскому вводу <Ctrl>+<D>), поскольку при этом read возвращает неудачу (код возврата равен 1) и while завершает работу. В первом цикле число введенных слов превышает количество переменных, поэтому значение переменной
var3var3Система управления заданиями
Командный интерпретатор может поддерживать управление заданиями. Для Bourne shell (/bin/sh), который мы рассматриваем, систему управления заданиями включает парный ему интерпретатор /bin/jsh. В остальном этот интерпретатор имеет те же возможности.
В системе управления заданиями каждая команда (простая или составная), которую пользователь запускает со своего терминала, называется заданием. Все задания могут выполняться либо в текущем режиме, либо в фоновом режиме, либо быть приостановлены. Задание в каждом из этих состояний обладает рядом характеристик:
| Состояние задания | Характеристики |
|---|---|
| Выполняется в текущем режиме | Задание может считывать данные и выводить данные на терминал пользователя |
| Выполняется в фоновом режиме | Заданию запрещен ввод с терминала. Возможность вывода на терминал определяется дополнительными установками |
| Приостановлено | Задание не выполняется |
Каждое задание при запуске получает уникальный идентификатор, называемый номером задания, который используется в командах системы управления. Синтаксис номера задания, применяемый в командах:
%<i>jobid</i>где
<i>jobid</i>%+ | Текущее задание — самое последнее запущенное или вновь запущенное задание |
- | Предыдущее задание (по отношению к текущему) |
?<i>строка</i> | Задание, для которого <i>строка</i> |
n | Задание с номером n |
<i>pref</i> | Задание, на которое можно уникально указать префиксом <i>pref</i> |