Название Функции | sh | csh | ksh | bash | tcsh | zsh | rc | es |
Исходный синтаксис (семейство) | sh | csh | sh | sh | csh | sh | rc | rc |
Распространяется бесплатно | N | N | N(3) | Y | Y | Y | Y | Y |
Проверка почты | N | Y | Y | Y | Y | Y | F | F |
Проверка работы терминала (tty) | N | N | N | N | Y | Y | N | N |
Наличие файла настройки при старте | N | Y | Y(4) | Y(4) | Y | Y | N | N |
Наличие файла настр. при входе (login) | N | Y | Y(4) | Y | Y | Y | N | N |
Можно обходить стартовый файл | N | Y | N | Y | N | Y | Y | Y |
Можно указать стартовый файл | N | N | Y | Y | N | N | N | N |
Используемые в таблице обозначения:
Y – Присутствует
N – Отсутствует
F – Может быть реализовано только с помощью механизма функций
L – Должна быть подключена специальная библиотека
Примечания:
1. Этого не было в первоначальной версии, но позже это стало стандартом
2. Эта особенность относительно новая и может отсутствовать во многих версиях shell
3. Есть бесплатная версия 'pdksh', но она не совсем соответствует версии AT&T Korn Shell
4. Только путем указания файла с помощью переменной среды 'ENV'
3. Порядок выполнения работы
3.1. Выяснить, как называется командная оболочка, которая запускается когда Вы входите в систему.
3.2. Дать в отчете письменные ответы на следующие вопросы:
3.2.1. Как задать переменную в bourne shell, как задать переменную среды?
Как получить значение переменной?
3.2.2. Как создать командный файл, который можно запускать по имени из командной строки?
3.2.3. Как заставить shell выполнить командный файл не порождая новый процесс? Дайте ответ для sh и csh.
3.2.4. Как перенаправляется ввод, вывод и вывод ошибок в bourne shell?
3.2.6. Что такое "command substitution", "variable substitution" ("variable expansion"), "filename expansion"?
3.2.7. Как получить звонок терминала в shell и C-shell?
3.2.8. Как получить ввод с терминала в командном файле shell? Дайте ответ для sh и csh.
4. Содержание отчета
В отчете должны содержаться ответы на вопросы пункта 3.2.
5. Контрольные вопросы
См. лабораторную работу №4.
Лабораторная работа N4
Изучение интерпретатора команд C-shell
1.Цель работы
Исследование команд и режимов оболочки C-shell (csh).
2.Основные положения
Оболочка 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 позволяет получить более подробную информацию).
3. Порядок выполнения работы
3.1. Изучить переназначение и дублирование (команда 'tee') стандартного ввода/вывода в csh.
3.2. Изучить организацию конвейеров и группового выполнения команд (операции ';', '&&', '||')
3.3. Ознакомиться с управлением процессами (команды stop, kill, bg, fg, ps, jobs)
3.4. Изучить действия с переменными. Выполнить заданную последовательность командных строк (в отчете приводится команда и результат выполнения).
Таблица 4.1 - Варианты заданий
Переменная | Вариант | |||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
A | 3 | 4 | 5 | 1 | 6 | 5 | 8 | 7 | 3 | 4 | 7 | 2 |
C | 5 | 4 | 7 | 6 | 4 | 2 | 1 | 3 | 3 | 8 | 5 | 1 |
#- это комментарий в командных файлах C-shell
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


