Online Documentation Server
 ПОИСК
ods.com.ua Web
 КАТЕГОРИИ
Home
Programming
Net technology
Unixes
Security
RFC, HOWTO
Web technology
Data bases
Other docs

 

 ПОДПИСКА

 О КОПИРАЙТАХ
Вся предоставленная на этом сервере информация собрана нами из разных источников. Если Вам кажется, что публикация каких-то документов нарушает чьи-либо авторские права, сообщите нам об этом.




Previous | Содержание | Next

ВВЕДЕНИЕ В UNIX

8. C-SHELL

Язык и интерпретатор языка C-Shell появился в версии сис- темы UNIX Калифорнийского университета в Беркли UNIX BSD4.2 для VAX-11. Основные достоинства этой версии заключаются в добавлении в UNIX редакторов ex и vi, интерпретатора C-Shell, реализации языков ПАСКАЛЬ и ЛИСП, базы данных INGRES и других возможностей.

8.1. Специальные символы в C-Shell

Стандартным знаком подсказки является процент (%). При желании его можно заменить.

Восклицательный знак ( ! ) выполняет многие специальные функции, в частности ( !! ) означает вызов предыдущей коман- ды.

Знак крышка ( ^ ) используется для разделения строк при коррекции части текста предыдущей команды.

Знак тильда ( ~ ) в качестве префикса имени пользователя расширяет его до полного имени его рабочего каталога.

Фигурные скобки ({ }) группируют список имен файлов в группу имен файлов.

8.2. Стандартные файлы в C-Shell

Когда вы входите в C-Shell, он ищет в вашем рабочем ката- логе файлы .login и .cshrc. Если такие файлы у вас есть, он выполняет все команды, расположенные в них. Файл .login ис- пользуется только при входе в C-Shell с терминала;

.cshrc - при любом входе.

8.3. Механизм истории

Встроенный механизм истории интерпретатора C-Shell хранит заданное число последних введенных вами команд. Число храни- мых команд равно значению предопределенной переменной history, которую вы можете установить в файле .cshrc коман- дой set:

   % set history = 15

(в отличие от Shell при установке переменной требуется слово set).

Чтобы посмотреть хранимые команды, надо распечатать на экране буфер механизма истории командой history, например:

   % history
   1 ls -l
   2 mail
   3 history
   %

Механизм истории обеспечивает возможность вызвать любую из хранимых команд, печатая восклицательный знак и номер ко- манды, например:

   % ! 1
   ls -l
   . . . .
   %

8.4. Коррекция предыдущей команды

Имеются различные средства для повторного исполнения пре- дыдущих команд, возможно, с изменением части повторяемой ко- манды.

Для коррекции непосредственно предыдущей команды есть следующие средства редактирования.

Пример:

   % cd /users/peter/shels
   /users/peter/shels: No such file or directory.

Допущена ошибка: shels вместо shells. Она исправляется следующим образом:

   %^shels^shells^
   cd/users/peter/shells
   %

Исправленная команда заносится в буфер истории:

   % history
   1 ls -l
   2 mail
   3 history
   4 cd /users/peter/shels
   5 cd /users/peter/shells
   6 history

Чтобы редактировать произвольную предыдущую команду, мож- но воспользоваться командой s (substitution) подстановки (см. раздел 8.6).

8.5. Повторное исполнение предыдущих команд

Исполнение предыдущих команд, сохраненных в буфере исто- рии, без повторного их набора можно осуществить различными способами.

Первый способ: напечатать восклицательный знак и имя ко- манды. Исполняется самая последняя команда из буфера истории с этим именем. Например:

   % !cd
   cd /users/peter/shells.

Необязательно печатать полное имя. Достаточно минимально- го количества символов начала имени, необходимого для одноз- начного его опознания в буфере истории, например:

   % !c
   cd /users/peter/shells.

Второй способ: напечатать и номер команды в буфере исто- рии без пробела между ними. Например:

   % !1
   ls -l
   <вывод команды ls -l>
   %

Наконец, имеется возможность использования последнего слова непосредственно предыдущей команды вводом двух зна- ков !$, например:

   % mv /users/wowa/spasewar.c space.c
   % pr  !$ | lpr
     pr  space.c | lpr
   %

8.6. Изменение и повторное исполнение предыдущих команд

Для исполнения частично измененных предыдущих команд ис- пользуется средство подстановки :s (substitution) части текста (похожее на аналогичное средство в редакторе ex).

Пусть имеется следующий буфер истории:

   %  history
   1  ls -l
   2  mail
   3  cd /users/peter/shels
   4  cd /users/peter/shells
   5  history
   6  cd /users/peter/shells
   7  ls -l
   8  mv /users/wowa/spacewar.c space.c
   9  pr  space.c | lpr
   10 history

Используем средство подстановки для изменения и испол- нения команды mv:

   % !8 : s /spacewar/empire/
   mv /users/wowa/empire.c space.c.

8.7. Ссылка на рабочий каталог пользователя

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

Примеры:

   % cd progs
   % mv ~/test.c

Последняя точка означает текущий каталог progs. Чтобы уз- нать, что же в действительности выполнено, посмотрим буфер истории:

   % !h
   . . . . . . .
   . . . . . . .
   11 mv /users/wowa/empire.c  space.c
   12 cd progs
   12 mv /users/peter/test.c .

Пусть имеется пользователь с именем nick. Чтобы узнать его рабочий каталог, можно использовать команду echo и средство знака тильда:

   % echo ~nick
   /users/nick
   %

8.8. Использование групп имен файлов

Кроме средств метасимволов для ссылки на множество файлов в C-Shell применяется средство группирования имен файлов для явного указания множества файлов в виде спискф имен файлов, заключенного в фигурные скобки.

Пример:

   % cp /users/peter/animals/{cats, dogs, birds}
Или: % cp ~mary/animals/{cats, dogs, birds}.

Эта команда копирует множество из трех файлов с именами:

   /users/peter/animals/cats
   /users/peter/animals/dogs
   /users/peter/animals/birds

В одной команде можно использовать более одной группы файлов, например:

   % echo ls{/bin, /usr/ucb}{pi, is}
   ls /bin/pi /bin/is /usr/ucb/pi /usr/ucb/is

8.9. Механизм переименования

Этот механизм, называемый alias, позволяет дать дополни- тельные (обычно короткие) имена часто используемым (обычно длинным) командам.

Пример:

   % alias cdm1 cd /users/sys/doce/mans/man/man1
   % alias cdm2 cd /users/sys/doce/mans/man/man2
   % alias cdm3 cd /users/sys/doce/mans/man/man3

Чтобы изменить текущий каталог, например, на ...man 2, достаточно ввести соответствующую команду по ее дополнитель- ному имени:

   % cdm2
   % pwd
   /users/sys/doce/mans/man/man2.

Те же переименования можно выполнить короче с использова- нием ссылки !$ на последнее слово команды:

   % alias cdm cd /users/sys/docs/mans/man/man \!$
   % cdm 3
   % pwd
   / users/sys/docs/mans/man3.

Обратный слэш перед восклицательным знаком исключает действие восклицательного знака как специального символа. Отмена переименования производится командой unalias, нап- ример:

   % unalias  cdm.

8.10. Переменные в C-Shell

Подобно языку Shell, C-Shell имеет встроенные переменные, установка которых может влиять на поведение интерпретатора. Установка значения переменной производится командой set, имеющей следующий синтаксис:

   set <переменная> = <значение>

Рассмотрим наиболее употребительные встроенные перемен- ные.

Переменная history задает количество предыдущих команд, сохраняемых в буфере истории, например: set history = 30.

Переменная path устанавливает каталоги для поиска команд. Список каталогов, разделенных пробелами, заключается в скоб- ки:

   set path = (/bin /usr/ucb $Home/bin .)

Переменная prompt задает строку подсказки перед выполне- нием очередной команды. При этом символы \ ! (обратный слэш и восклицательный знак) в строке подсказки задают текущий номер команды, используемый в механизме истории.

Пример:

   % set prompt =  "ed \ ! >"
   ed5> history
   . . . . . . . .
   5 history

Переменная Shell указывает, какой интерпретатор вы хотите в качестве начального. Возможные значения: /bin/csh или /bin/sh.

Булевская переменная noclobber используется для защиты уже существующего файла от случайной потери путем перезаписи в него при перенаправлении стандартного вывода. Для этого ее надо установить в значение "истина":

   % set noclobber
   % fgrep ounds /usr/dict/words > shells
   Shells: File exists -

(файл с именем shells уже существует и его текущая версия была бы потеряна). Если вы тем не менее хотите перезаписать этот файл, используйте перенаправление с восклицательным знаком (>!):

   % fgrep ounds /usr/dict/words >! shells

В этом случае перезапись состоится. Установка булевской переменной в противоположное значение "ложь" выполняется ко- мандой:

   unset noclobber.

Переменные home и cwd, устанавливаемые автоматически, равны полным именам собственного и текущего каталогов соот- ветственно.

Переменная status автоматически возвращает нулевое значе- ние, если текущая команда завершена без ошибок. Ненулевое значение указывает ошибочное завершение.

Переменная argv содержит аргументы командной строки с ну- мерацией аргументов следующим образом: argv [0] - команда, argv [1] - первый аргумент и так далее (как в языке C).

Доступ к переменным обеспечивается ссылкой на имена с предшествующим знаком $, например, $cwd, $argv [0] и т.д.

Посмотреть текущие значения встроенных переменных можно командой set без параметров:

   % set

Пользователь может определить свои переменные типа строка знаков. Например:

   % set wd = `pwd`
   % echo $wd
   /users/sys/docs.

Здесь результат выполнения команды pwd (строка полного имени рабочего каталога пользователя) присвоен переменной wd, значение которой проверено командой echo.

Кроме строковых переменных можно определить числовые пе- ременные, принимающие значения типа целое, вещественное или булевское. Целое и вещественное значение начинающееся с ну- ля, считается восьмеричным, иначе - десятичным. Установка значения числовой переменной выполняется командой @ (аналог set для строковых переменных).

Пример:

   % @ sum = (1 + 4)
   % echo $sum
   5

В общем случае синтаксис команды @ такой:

   @ <переменная>  ,

где C-операция - один из операторов присваивания, приня- тых в языке C (=, +=, -=, *=, /=, %=), а C-выражение - выра- жение в синтаксисе языка C.

8.11. Метасимволы в C-Shell

Метасимволами называются символы, имеющие специальное значение для интерпретатора.

В C-Shell имеются следующие метасимволы:

  • синтаксические;
  • именования файлов;
  • кавычки;
  • ввода - вывода;
  • подстановки;
  • прочие.

Многие из них сходны по функциям с аналогичными функциями метасимволов обычного Shell.

Синтаксические метасимволы:

   ; - разделяет команды, которые будут выполнены последова-
тельно;
   | - разделяет команды, соединенные каналом, так что стан-
дартный вывод левой является стандартным вводом правой;
   |& - аналогично |, однако диагностический вывод тоже нап-
равляется на ввод следующей команды;
   ( ) - объединяют команды,  разделенные предыдущими знака-
ми,  в единое целое для использования  в  последовательности
или с каналом;
   & - предписывает выполнение команды на заднем  плане  па-
раллельно со следующей командой, например:
   cat  letter>/dev/lp &
   || - аналогичен знаку |, однако правая команда выполняет-
ся, только если левая завершилась аварийно;
   && - аналогичен знаку |, однако правая выполняется, толь-
ко если левая завершилась нормально.

   Метасимволы именования файлов:
   ? -  любой  символ в имени файла.  Например,  файлы fa.o,
fb.o, fc.o могут быть напечатаны одной командой:
   $ cat f?.o > total.o
   * - любая строка в имени файла.  Например,  удаление всех
файлов, имена которых начинаются с old:
   % rm old*
   [] -  любая одна буква из указанного в квадратных скобках
диапазона. Например:
   % ls  f.[a  -  z] - печать всех файлов типа f.x,  где x -
буква из диапазона a - z;
   {} - аналогичны квадратным скобкам [], однако вместо диа-
пазона указано множество букв. Например, печать файлов list,
last, lost:
   % ls l{iao}st;
   ~ - полное имя рабочего каталога пользователя (см.выше);
   / - разделяет имена каталогов и файла в полном имени
файла или каталога.

   Метасимволы - кавычки:
   \ - отменяет мета-значение следующего за ним одного мета-
символа. Например:
   % ls \*
   * not found
   (в то время как %  ls * - печать всех файлов текущего ка-
талога)
   ' ' - отменяет мета-значения группы символов. Пример:
   % set string = 'ws - l $dir / $file'
   " " - аналогичны одиночным кавычкам,  однако  подстановка
значений переменных и команд выполняется. Пример:
   % echo "$dir is not a directory."

   Метасимволы ввода - вывода:
   < - перенаправление ввода;
   > - перенаправление вывода (если переменная noclobber ус-
тановлена, перезапись существующего файла вывода не происхо-
дит);
   >& - перенаправление диагностического вывода;
   >! - перенаправление вывода (с  обязательной  перезаписью
существующего файла вывода);
   >&! - аналогично >! для диагностического вывода;
   >> - аналогично >,  однако вывод добавляется в конец  су-
ществующего файла вывода; если файл не существует и перемен-
ная noclobber установлена, возникает ошибка;
   >>& -  аналогично  >&,  однако  вывод добавляется в конец
файла вывода;
   >>! - аналогично >>,  однако, если файл вывода не сущест-
вует, он создается (ошибки не возникает);

   >>&! - комбинация >>& и >>!

   Метасимволы подстановки:
   $ - указывает подстановку значения переменной, например:
   % set M1 = /usr/man/man3
   % cd $M1
   ! - указывает подстановку команды из буфера истории;
   : - указывает подстановку строк в команде из буфера исто-
рии;
   ? - используется в специальных случаях подстановок команд
из буфера истории.

   Прочие метасимволы:
   # (диез) - указывает комментарий C-Shell;  начинает имена
временных файлов;  должен быть  первым  символом  командного
файла в C-Shell;
   % - указывает номер процесса, например:
   kill %1.

8.12. Некоторые команды C-Shell

В добавление к командам языка Shell в C-Shell появился ряд полезных команд. Рассмотрим некоторые из них.

Команда ls с ключом -F позволяет получить листинг катало- га с указанием знаком * исполнимых файлов и знаком / катало- гов.

   Пример:

   % ls -F
   mail help lint1* tabset/

Команда head, симметричная команде tail, позволяет пос- мотреть на экране заданное количество первых строк файла (по умолчанию 10 строк), например:

   % head -2 people
   Mary  Clark  101
   Sally Smith  113

Листание файла на экране позволяет осуществить команда more, например:

   % more somefile
   <первая страница фала>
   - - More - - (3 %)
   %

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

Можно задать начало просмотра со строки с заданным номе- ром или заданным значением. Примеры:

   % more +194 somefile
   . . . . .
   % more +'more then' somefile

В общем случае значение задается регулярным выражением, как в ed или grep (см. раздел 10.5).

Команда apropos позволяет найти разделы руководств, ка- сающиеся заданного ключевого слова.

   Пример:
   % apropos sort
   ddsort (3/21/80) - sort DDBS files
   look (1)         - find lines in a sorted list
   . . . . . . . . . . . . . . .
   tsort (1)        - topological sort
   % man look
   <руководство по look (1)>

Просмотреть заголовки руководств можно командой whatis,

например:

   % whatis mv ln cp
   cp (1)  - copy
   ln (1)  - make links
   mv (1)  - move or rename files

Команда whereis позволяет найти специальные файлы, свя- занные с указанной командой (опция -m находит файл руководс- тва, опция -b - файл кода команды).

   Пример:
   % wheris -m rm
   rm: /usr/man/man1/rm.1
   % wheris -b rm
   rm: /bin/rm

Команда strings позволяет просмотреть в любом (в том чис- ле выполнимом) файле все строки (в коде ASCII).

8.13. Оценка состояния файла

Выражение, возвращающее значение, зависящее от состояния файла, используется в условных операторах (см.ниже). Значе- ние равно единице (1), если выражение истинно, и ноль (0), если оно ложно или файл не существует.

Синтаксис выражения:

   -op <имя файла>,
где op принимает значения:
   d - является ли файл каталогом?
   e - файл существует?
   f - является ли файл простым файлом?
   o - это мой собственный файл?
   r - имею ли я право чтения файла?
   w - имею ли я право записи файла?
   x - могу ли я выполнить файл?
   z - файл пуст (длина ноль байтов)?
   Пример:
   if (-d $dir) then
   echo "**** $dir is a directory"

8.14. Работы

Любая последовательность команд, разделенных метасимвола- ми ; или |, а также отдельная команда является работой. Каж- дая работа выполняется отдельным процессом.

Заканчивая такую последовательность команд или отдельную команду знаком &, можно задать выполнение работы на заднем плане, то есть параллельно с будущими работами. В этом слу- чае система сообщает вам номер работы в скобках и номер про- цесса, например:

   % du > usage &
   [1] 503
   % ls -al
   <Содержание текущего каталога>
   %.

По окончании работы система сообщает о завершении (нор- мальном или аварийном), указывая номер работы и процесса, например:

   .....
   [1] 503 - Done  du > usage
   %.

Чтобы посмотреть, какие работы активны в данный момент, используйте команду jobs -l.

Эта команда распечатает список работ с указанием их сос- тояния:

   Running (выполняется) или Stopped (остановлена).

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

8.16. Выражение в скриптах

Допускается использование выражений над переменными по правилам операций в языке C. Например, операции '==' и '!=' сравнивают строки, операции '&' и '|' реализуют булевские операции 'и' и 'или' и так далее. Введены также специальные операции '=~' и '!~', подобные операциям '==' и '!=', однако в правой строке допускаются метасимволы C-Shell (*, ? и []).

Кроме того, допустимы выражения для оценки состояния фай- ла (см. раздел 8.13).

Результат выполнения предыдущей команды (нормальное или аварийное завершение) можно получить в виде значения пере- менной

   $status (ноль - без ошибок, не ноль - авария).

8.17. Управляющие структуры скриптов

Допустимые в C-Shell управляющие структуры взяты из языка C. Напомним, что скрипт в C-Shell должен начинаться с симво- ла #(диез). Этим же символом вводится комментарий, продолжа- ющийся до конца строки.

8.17.1. Оператор foreach

Оператор цикла foreach имеет синтаксис:

   foreach <индекс> (<список значений индекса через пробелы>)
   <команда 1>
   <команда 2>
   ..........
   end.

Все команды выполняются для каждого значения индекса из списка значений.

Внутри цикла можно использовать команду break для прекра- щения выполнения цикла и команду continue для преждевремен- ного прекращения одной текущей итерации.

При выходе из цикла индекс имеет значение последнего эле- мента из списка значений.

8.17.2. Оператор if-then-endif

Условный оператор имеет синтаксис:

   if (<выражение>) then
   <команда 1>
   <команда 2>
   ..........
   else
   <команда A>
   <команда Б>
   ..........
   endif

Если альтернатива else пуста (команды А, Б, ... отсутс- твуют), else можно опустить. Реализация C-Shell требует, чтобы if и then были обязательно на одной строке.

Допустимы вложенные условные операторы, например:

   if (<выражение 1>) then
   <команда 1>
   ..........
   else if (выражение 2> then
   <команда А>
   ..........
   else
   <команда X>
   ..........
   endif
   endif

Если в первой альтернативе только одна команда, допуска- ется следующий синтаксис:

   if (<выражение>) <команда 1>
   или: if (выражение>\
   <команда>

где символ \ должен предшествовать символу перевода ка- ретки.

8.17.3. Оператор while

Оператор цикла while имеет синтаксис:

   while (<выражение>)
   <команда 1>
   <команда 2>
   ..........
   end.

Внутри цикла допустимы операторы break и continue (см.foreach).

8.17.4. Оператор switch

Оператор выбора имеет синтаксис:

   switch (<переменная>)
   case <значение 1>:
   <команды>
   ........
   breaksw
   case <значение 2>:
   <команды>
   ........
   breaksw
   ........
   case <значение n>:
   <команды>
   ........
   breaksw
   default:
   <команды>
   ........
   breaksw
   endsw

В отличие от аналогичного оператора в языке C здесь ис- пользуется специальный оператор breaksw для выхода из аль- тернативы.

Выполнение осуществляется следующим образом: значение пе- ременной сравнивается последовательно со значениями 1, 2, ..., n, и выполняются команды первой из альтернатив, для ко- торых значения совпали. Если таких значений не оказалось, выполняются команды из альтернативы по умолчанию (default).

8.17.5. Оператор goto

Допускаются метки операторов и оператор goto.

   Например:
   loop:
   <команда 1>
   <команда 2>
   ..........
   goto loop
Ъ8.18. Ввод в командах скрипта

Обеспечение ввода в командах скрипта в C-Shell из потока символов текста скрипта вместо стандартного ввода (использу- емого по умолчанию), потребовало введения специального син- таксиса. Рассмотрим пример скрипта:

   #
   foreach i ($argv)
   ed -$i << 'STOP'
   1, $s/wine/water/g
   w
   q
   'STOP'
   end

Строка 'STOP', появляющаяся в тексте скрипта дважды, яв- ляется меткой, ограничивающей текст ввода, и означает, что стандартный ввод для команды ed заменяется посредством меха- низма перенаправления (знак <<) вводом текста из файла само- го скрипта. Ограничитель 'STOP' заключен в кавычки, чтобы предотвратить подстановку переменных и команды внутри него. В примере редактор ed выполняет глобальную подстановку всех вхождений строки wine на строку water (см. раздел 12.4).

8.19. Обработка прерываний в скриптах

Если ваш скрипт создает временные файлы, вы можете захо- теть уничтожить их, даже если прерывание скрипта не позволит вам выполнить скрипт до конца (предполагается, что в конце скрипта временные файлы всегда уничтожаются).

Для этого вам нужно в начале скрипта выполнить команду onintr label, где label - произвольная метка, начиная с ко- торой в вашем скрипте стоят команды, которые будут выполне- ны, если произойдет прерывание (так как в случае прерывания C-Shell автоматически выполнит команду goto label, где label - метка из команды onintr).

При этом вы можете предусмотреть среди выполняемых в слу- чае прерывания команд в качестве последней команду exit 1, чтобы обеспечить ненулевое значение переменной $status, сви- детельствующей о неблагополучном завершении скрипта.

8.20. Пример скрипта

Данный скрипт выполняет сохранение файлов C-программ, ко- торые уже сохранялись ранее. Файлы сохраняются в подкаталоге backup вашего рабочего каталога.

   #
   foreach i ($argv)
   if ($i \ !~  ~/*.c)
   then # является ли файл $i файлом С-программы ?
   echo файл $i не является файлом С-программы
   continue
   else
   echo файл $i является файлом С-программы
   endif
   echo check file ~/backup/$i
   if (-e ~/backup/$i)
   then # находится ли файл $i в подкаталоге  backup?
   echo  файл $i не находится в подкаталоге  backup
   continue
   endif
   echo compare two files $i and ~/backup/$i
   cmp -s $i ~/backup/$i

   if ($status != 0) then
   echo новая копия файла $i
   cp $i ~/backup/$i
   endif
   end.

Собственно копирование делается командой cp, а все ос- тальные строчки скрипта организуют цикл и осуществляют про- веркия.

Previous | Содержание | Next



With any suggestions or questions please feel free to contact us