Командные файлы (скрипты) в 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.