Rambler's Top100
Вход в Персональный кабинет

Имя пользователя

Пароль

Начальная страница
Телекоммуникационная компания «Караван» - оператор связи, провайдер интернет. Офисная
телефония. Телефония Москва, телефонные линии, интернет телефония, передача данных.

3. Управляющие конструкции

Простая команда — это последовательность слов, разделенная пробелами. Первое слово является именем команды, которая будет выполняться, а остальные будут переданы ей как аргументы. Имя команды передается ей как аргумент номер 0 (т.е. имя команды является значением $0). Значение, возвращаемое простой командой — это ее статус завершения, если она завершилась нормально, или (восьмеричное) 200+статус, если она завершилась аварийно.

Список — это последовательность одного или нескольких конвейеров, разделенных символами ;, &, && или || и быть может заканчивающаяся символом ; или &. Из четырех указанных операций ; и & имеют равные приоритеты, меньшие, чем у && и ||. Приоритеты последних также равны между собой. Символ ; означает, что конвейеры будут выполняться последовательно, а & — параллельно. Операция && (||) означает, что список, следующий за ней будет выполняться лишь в том случае, если код завершения предыдущего конвейера нулевой (ненулевой).

Команда — это либо простая команда, либо одна из управляющих конструкций. Кодом завершения команды является код завершения ее последней простой команды.

3.1. Цикл ДЛЯ

for <переменная> [ in <набор> ]
do
<список>
done

Если часть in <набор> опущена, то это означает in “$@” ( то есть in $1 $2 … $n). Пример. Вывести на экран все фортранные файлы текущей библиотеки:

for f in *.for
do
cat $f
done

3.2. Оператор выбора

case $<переменная> in
   <шаблон> | <шаблон>... ) <список> ;;
   ...
esac

Оператор выбора выполняет <список>, соответствующий первому <шаблону>, которому удовлетворяет <переменная>. Форма шаблона та же, что и используемая для генерации имен файлов. Часть | шаблон... может отсутствовать.

Пример. Определить флаги и откомпилировать все указанные файлы.

# инициализировать флаг
flag=
# повторять для каждого аргумента
for a
do
   case $a in
      # объединить флаги, разделив их пробелами
         -[ocSO]) flag=$flag' ' $a ;;
         -*) echo 'unknown flag $a' ;;
      # компилировать каждый исходный файл и сбросить флаги
         *.c) cc $flag $a; flag= ;;
         *.s) as $flag $a; flag= ;;
         *.f) f77 $flag $a; flag= ;;
      # неверный аргумент
         *) echo 'unexpected argument $a' ;;
   esac
done

3.3. Условный оператор.

if <список1>
then
   <список2>
   [
      elif <список3>
      then
         <список4>
   ]
   ...
   [ else <список5> ]
fi

Выполняется <список1> и, если код его завершения 0, то выполняется <список2>, иначе — <список3> и, если и его код завершения 0, то выполняется <список4>. Если же это не так, то выполняется <список5>. Части elif и else могут отсутствовать.

3.4. Цикл ПОКА

while <список1>
do
   <список2>
done

До тех пор, пока код завершения последней команды <списка1> есть 0, выполняются команды <списка2>. При замене служебного слова while на until условие выхода из цикла меняется на противоположное.

В качестве одной из команд <списка1> может быть команда true (false). По этой команде не выполняется никаких действий, а код завершения устанавливается 0 (-1). Эти команды применяются для организации бесконечных циклов. Выход из такого цикла можно осуществить лишь по команде break (см. Специальные команды).

3.5. Функции

<имя> () {
   <список>;
}

Определяется функция с именем <имя>. Тело функции — <список>, заключенный между { и }.

3.6. Зарезервированные слова

Следующие слова являются зарезервированными:

if then else elif fi
case in esac { } for
while until do done

3.7. Специальные команды

Как правило, для выполнения каждой команды shell порождает отдельный процесс. Специальные команды отличаются тем, что они встроены в shell и выполняются в рамках текущего процесса.

:Пустая команда. Возвращает нулевой код завершения.
. fileShell читает и выполняет команды из файла file, затем завершается; при поиске file используется список поиска $PATH.
break [n]Выход из внутреннего for или while цикла; если указано n, то выход из n внутренних циклов.
continue [n]Перейти к следующей итерации внутреннего for или while цикла; если указано n, то переход к следующей итерации n-ого цикла.
cd [ <аргумент> ]Сменить текущую директорию на директорию <аргумент>. По умолчанию используется значение HOME.
echo [ <арг> … ]Выводит свои аргументы в стандартный вывод, разделяя их пробелами.
eval [ <арг> … ]Аргументы читаются, как если бы они поступали из стандартного ввода и рассматриваются как команды, которые тут же и выполняются.
exec [ <арг> … ]Аргументы рассматриваются как команды shell’а и тут же выполняются, но при этом не создается нового процесса. В качестве аргументов могут быть указаны направления ввода-вывода и, если нет никаких других аргументов, то будет изменено лишь направление ввода-вывода текущей программы.
exit [ n ]Завершение выполнения shell’а с кодом завершения n. Если n опущено, то кодом завершения будет код завершения последней выполненной команды (конец файла также приводит к завершению выполнения).
export [ <переменная> … ]Данные переменные отмечаются для автоматического экспорта в окружение (см. Окружение) выполняемых команд. Если аргументы не указаны, то выводится список всех экспортируемых переменных. Имена функций не могут экспортироваться.
hash [ -r ] [ <команда> … ]Для каждой из указанных команд определяется и запоминается путь поиска. Опция -r удаляет все запомненные данные. Если не указан ни один аргумент, то выводится информация о запомненных командах: hits — количество обращений shell’а к данной команде; cost — объем работы для обнаружения команды в списке поиска; command — полное имя команды. В некоторых ситуациях происходит перевычисление запомненных данных, что отмечается значком * в поле hits.
pwdВыводит имя текущей директории.
read [ <переменная> … ]Читается из стандартного ввода одна строка; первое ее слово присваивается первой переменной, второе — второй и т.д., причем все оставшиеся слова присваиваются последней переменной.
readonly [ <переменная> … ]Запрещается изменение значений указанных переменных. Если аргумент не указан , то выводится информация обо всех переменных типа readonly.
return [ n ]Выход из функции с кодом завершения n. Если n опущено, то кодом завершения будет код завершения последней выполненной команды.
set [ --aefkntuvx [ <арг> … ] ]Команда устанавливает следующие режимы:
-aотметить переменные, которые были изменены или созданы, как переменные окружения (см. Окружение)
-eесли код завершения команды ненулевой, то немедленно завершить выполнение shell’а
-fзапретить генерацию имен файлов
-kвсе переменные с именем помещаются в окружение команды, а не только те, что предшествуют имени команды (см. Окружение)
-nчитать команды, но не выполнять их
-tзавершение shell’а после ввода и выполнения одной команды
-uпри подстановке рассматривать неустановленные переменные как ошибки
-vвывести вводимые строки сразу после их ввода
-xвывести команды и их аргументы перед их выполнением
--не изменяет флаги, полезен для присваивания позиционным переменным новых значений.
При указании + вместо — каждый из флагов устанавливает противоположный режим. Набор текущих флагов есть значение переменной $-. <арг> — это значения, которые будут присвоены позиционным переменным $1, $2 и т.д. Если все аргументы опущены, выводятся значения всех переменных.
shift [ n ]Позиционные переменные, начиная с $(n+1), переименовываются в $1 и т.д. По умолчанию n=1.
testвычисляет условные выражения (см. Дополнительные сведения. Test )
trap [ <арг> ] [ n ] …Команда <арг> будет выполнена, когда shell получит сигнал n (см. Сигналы). (Надо заметить, что <арг> проверяется при установке прерывания и при получении сигнала). Команды выполняются по порядку номеров сигналов. Любая попытка установить сигнал, игнорируемый данным процессом, не обрабатывается. Попытка прерывания по сигналу 11 (segmentation violation) приводит к ошибке. Если <арг> опущен, то все прерывания устанавливаются в их начальные значения. Если <арг> есть пустая строка, то этот сигнал игнорируется shell’ом и вызываемыми им программами. Если n=0, то <арг> выполняется при выходе из shell’а. Trap без аргументов выводит список команд, связанных с каждым сигналом.
type [ <имя> … ]Для каждого имени показывает, как оно будет интерпретироваться при использовании в качестве имени команды: как внутренняя команда shell’а, как имя файла или же такого файла нет вообще.
ulimit [ -f ] [ n ]Устанавливает размер файла в n блоков; -f — устанавливает размер файла, который может быть записан процессом-потомком (читать можно любые файлы). Без аргументов — выводит текущий размер.
umask [ nnn ]Пользовательская маска создания файлов изменяется на nnn. Если nnn опущено, то выводится текущее значение маски. Пример: после команды umask 755 будут создаваться файлы, которые владелец сможет читать, писать и выполнять, а все остальные — только читать и выполнять.
unset [ <имя> … ]Для каждого имени удаляет соответствующую переменную или функцию. Переменные PATH, PS1, PS2 и IFS не могут быть удалены.
wait [ n ]Ждет завершения указанного процесса и выводит код его завершения. Если n не указано, то ожидается завершения всех активных процессов-потомков и возвращается код завершения 0.



2-й Обыденский пер., д. 12а, Москва, Россия, 119034
Телефон: +7 495 363-2252. Техническая поддержка: +7 495 721-1388
Схема проезда

Электронная почта: info@caravan.ru


Rambler's Top100