Введение в Unix

       

Командные файлы (скрипты) в C-Shell


Командный файл (скрипт) - это файл, состоящий из команд, выполняемых группой. Примеры скриптов - файлы .login, .cshrc, .logout. Прежде чем писать свой скрипт, проверьте UNIX Reference используемой Вами версии UNIX, нет ли там команды, уже решающей вашу задачу.

Первый способ выполнения скрипта - ввести команду:

% csh sname arg1 arg2 ...,

где sname - имя скрипта; arg1, arg2, ... - аргументы скрипта.

Аргументы скрипта автоматически помещаются во встроенные переменные $argv[1], $argv[2] и так далее.

Кроме того, аргументы доступны по ссылкам $n, где n - целое, равное позиции аргумента; $0 означает sname. Различие между $argv[n] и $n заключается в том, что первая ссылка дает ошибку при выходе значения n за допустимые пределы, а вторая - нет.

Второй способ выполнения скрипта в C-Shell - обеспечить его выполнимость (командой chmod) и позаботиться о том, чтобы он начинался с символа # (диез); в противном случае скрипт будет выполняться обычным Shell.

Пример:

% chmod a+x sname % sname arg1, arg2, ...

При выполнеии скрипта производится подстановка значений переменных, ссылки на которые указывает знак $. Переменная должна обладать значением в момент ссылки на нее, иначе возникает ошибка.

Узнать, присвоено ли значение переменной, можно с помощью выражения $?<имя> (1 - присвоено, 0 - нет), а количество компонентов значения дает выражение $#<имя>.

На компоненты значения можно ссылаться выражением $<имя>[n], где n - номер компоненты. Компоненты значения разделяются пробелами, а многокомпонентное значение заключается в скобки.

Пример:




% set sum1 = (a b c) % echo $?sum1 1 % echo $#sum1 3 % echo $sum1[2] b % unset sum1 % echo $?sum1 0.

Другими полезными подстановками, начинающимися знаком $, являются:

$* - эквивалентно $argv>;

$$ - номер процесса; поскольку он уникален в системе, его удобно использовать для генерации уникального имени временного файла;

$< - заменяется строкой последующего ввода со стандартного ввода (клавиатура терминала), что очень полезно при написании интерактивных скриптов.

Пример:

echo "yes or no?" set a = ($<)

На экране высветится запрос (yes or no?), затем будет прочитан ответ и присвоен переменной a.




Содержание раздела