П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 183221 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 82909 раз(а).

Учебник HTML.
Просмотров 77486 раз(а).

Руководство по PHP5.
Просмотров 48315 раз(а).

Хостинг через призму DNS.
Просмотров 55773 раз(а).

Подборка текстов стандартных документов.
Просмотров 47662 раз(а).

Учебник PHP - Самоучитель
Просмотров 54114 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 55185 раз(а).

Внешние атаки...
Просмотров 44579 раз(а).

Учебник PHP.
Просмотров 39677 раз(а).

SSI в примерах.
Просмотров 29751 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





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
                # об(r)единить флаги, разделив их пробелами
                -[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 и выполняются в рамках текущего процесса.

: Пустая команда. Возвращает нулевой код завершения.
. file Shell читает и выполняет команды из файла 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.

Назад | Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: