Читайте также: |
|
Оболочка C-shell выполняет две основные функции: поддержка интерактивного режима работы с ОС и программирование пакетного режима выполнения команд. Программирование в C-shell более удобное, чем в shell и синтаксис языка близок к синтаксису языка Си. Как интерпретатор, C-shell получает команды пользователя с терминала или из простого командного файла и порождает процессы, соответствующие командам. Как язык программирования C-shell содержит переменные, управляющие операторы и операторы-модификаторы. Переменные в качестве значений получают слова и массивы слов.
Командная строка состоит из списка слов и их разделителей. Интерпретатор различает также метасимволы.
разделители:; () < > & | <таб> <пробел>
метасимволы:! $: *,? [ ] { } @ ~. ^
Существуют три разновидности кавычек для использования в командах: двойные, одинарные правые и одинарные левые.
"строка в двойных кавычках" интерпретируется всегда - в ней могут использоваться метасимволы и выполняются подстановки значений переменных.
'строка в одинарных правых кавычках' - не интерпретируется и все метасимволы не заменяются значениями (исключение – метасимвол `!` - он экранируется обратным слэшем `\`).
`строка в одинарных левых кавычках` - интерпретируется как командная, выполняется и заменяется результатом выполнения.
Можно выполнить любую последовательность команд, разделяя их символом ';' в одной командной строке: cd /mnt/stud; ls -l. Для управления выполнением последовательности команд используются логические связки '||', '&&' и круглые скобки ().
Пусть А и В - команды ОС,
А && В - команда В выполняется, если А завершается успешно;
А || В - команда В выполняется, если А заканчивается с ошибкой.
Для организации последовательной обработки потока данных используется возможность соединения стандартного вывода одной команды со стандартным вводом следующей - т. наз. конвейеризация. Для обьединения команд в конвейер они разделяются символом '|':
ls -la | sort | more
В C-shell предусмотрена возможность выполнения команд в асинхронном (фоновом) режиме, для этого в конце команды ставится символ '&': ls -l > /dev/lp&
Для переназначения потоков ввода/вывода используются следующие разделители: >, <, >>, <<, >&, >>&. Команда OC 'tee' дублирует стандартный вывод.
В языке C-shell определены следующие типы переменных:
- слово
- строка
- массив слов
- позиционная переменная.
Имя переменной - любая последовательность символов и цифр (кроме метасимволов). Переменная определяется оператором присваивания (или вычисления выражения):
set VAR = word1
@ IVAR = 128
set SVAR = "$VAR BC"('')
set MVAR = ($VAR $IVAR 45f)
Для указания того, что используется значение переменной, перд ее именем без пробела ставится символ '$'. Символы '#' и '?'используются для управления режимами подстановок. Существуют три режима подстановок:
- подстановка собственного значения переменной;
- подстановка собственного значения позиционной переменной;
- подстановка информации о переменной.
Форматы подстановок:
$var или ${var} - значение переменной
$mas[n] - значение n-го элемента массива
$?var - 1 или 0 в зависимости от того, определена переменнная или нет
$#mas - размерность массива.
$n эквивалентно $argv[n] - n-я позиционная переменная.
Для чтения строки с клавиатуры есть конструкция '$<'
set answer = $<
B C-shell числом считается символьная строка, которая может интерпретироваться как целое число. Символ '@' в начале строки означает, что указанные далее слова (имена переменных и т. п.) образуют выражение. Результатом или аргументом логического выражения может быть 1 (не 0) - истина или 0 - ложь.
Операции:
1) логические и отношения: ==,!= (в т. числе и для сравнения строк),||,&&,<,>,<=,>=,! (унарная);
2) арифметические: +,-,/,%,*,++,--;
3) поразрядные логические: &,^,~,|,>>,<<;
4) присваивания =,+=,<<= и т. п. (как в языке Си).
Старшинство операций представляется слева направо следующим рядом: ||,&&,|,^,&,==,!=,<=,>=,<,>,<<,>>,+,-,*,/,%,!,~,().
Переменные в C-shell делятся на два вида - внешние (рассматривались выше) и внутренние (используются для задания среды запускаемого процесса).
Интерпретатор может порождать один или несколько процессов, каждому из которых ОС присваивает уникальный номер – идентификатор процесса (process ID или PID). Есть два вида идентификаторов - системный (его показывает команда 'ps') и внутренний. Внутренний идентификатор присваивается процессу командным интерпретатором конкретного пользователя.
Процесс может находиться в двух состояниях – выполняться или быть приостановленным.
Завершить синхронный процесс можно с помощью ^C или команды kill c ключем -9, а асинхронный - только с помощью "kill".
Приостановить процессы можно так:
синхронные - ^s или ^z;
асинхронные - stop %внутр_ид возобновить на выполнение
синхронный процесс - команда "fg",
асинхронный - "bg".
Для получения внутренних идентификаторов процессов есть команда jobs (ключ -l позволяет получить более подробную информацию).
Дата добавления: 2014-12-19; просмотров: 121 | Поможем написать вашу работу | Нарушение авторских прав |