Смекни!
smekni.com

Администрирование локальных сетей (стр. 6 из 39)

% @ r= ( 2 << 4 )

% echo $r

32

Основные операции присвоения в csh

Операция Описание
= Простое рисвоение а = b
+= a = a + b
-= a = a - b
*= a = a * b
/= a = a / b
%= a = a % b

Постфиксные операции

К последним относятся операции ++ и --

% @ a=10

% @ a++

% echo $a

11

Основные файловые операции

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

-file_test filename

где file_test иfilename могут принимать следующие значения

file_test описание
d Является ли файл директорией ?
e Существует ли файл ?
f Это обычный файл ?
o Являюсь ли я его собственником ?
r Имеются ли права на чтение из файла ?
w Имеются ли права на запись в файл
x Можно ли исполнять этот файл ?
Z Пустой ли файл

2.3.5 Задания

Каждый раз когда одна или больше команд (например связанные через пайп, или последовательно) выполняються шелл создает один блок команд назывемый заданием. Фактически каждая строка введенная в строке шелла является заданием. Задание может исполняться также в фоновом режиме если при запуске в конце стоял символ &. В этом случае после запуска шелл выдаст номер задания в своей таблице заданий и номер процесса. Просмотреть таблицу активных в данный момент заданий можно воспользовавшись командой jobs . После завершения фонового процесса шелл проинформирует пользователя об этом.

% sleep 10 &

[1] 73059

% jobs

[1] + Running sleep 10

% ps

PID TTY TIME COMMAND

71453 pts/2 0:00.03 -sh (csh)

73059 pts/2 0:00.00 sleep 10

73061 pts/2 0:00.00 ps

…. Спустя 10 секунд ….

%

[1] Done sleep 10

2.3.6 Скрипты

сsh крипты могут как и Bourne Shell скрипты быть запущены двумя способами. Либо

csh script_file arg1 arg2 ….

либо установив атрибут исполняемости на файл и запустив его

chmod +x script_file

./script_file arg1 arg2 ….

При этом первая строчка должна содкржать полный путь к интерпретатору с префиксом #! , в нашем случае она должна выглядеть так: #!/usr/bin/csh . Без этой строчки система в качестве интерпретатора скрипта запустит Bourne Shell что приведет к ошибке.

При запуске csh помещает аргументы скрипта в массив argv доступ к которым возможее через argv[1], argv[2], … Аргумента argv[0] не существует, вместо этого имя скрипта помещается в аргумент $0.

Для проверки установлена ли данная переменная можно воспользоваться конструкцией

$?variable

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

$#variable

Для доступа к компонентам переменной необходимо следовать следующему правилу:

$variable[componet_number]

Также как и в Bourne Shell возможно использование переменных $n вместо argvn и $* вместо $argv. В отличии от команды read в Bourne Shell csh использует конструкцию $< для интерактивонго ввода.

Все вышесказанное иллюстрируется на следующих примерах:

% echo $#var1

var1: Undefined variable.

% set var1=a

% echo $#var1

1

% set var1=(a b c)

% echo $#var1

3

% echo $var1[1]

a

% echo $var1[1-3]

a b c

% set a=($<)

xxx

% echo $a

xxx

Еще одно отличие csh от Bourne Shell заключается в том что с помощью фигурных скобок { } можно проверять завершилась ли нормально команда помещенная в эти скобки. Например, следующий скрипт:

#!/usr/bin/csh

if ({ cat /tmp/aaa }) then

echo OK

endif

в случае успешного вывода содержимого файла /tmp/aaa напечатает в конец фразу OK.

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

В виду того что все управляющие структуры csh очень похожи на аналогичные в Bourne Shell кратко остановимся лишь на их синтаксисе. По своему синтаксису они очень близки с аналогисными командами языка программирования С.

Условный оператор

if ( expression ) then

command1

command2

else

command1

command2

endif

Если требуется запуск лишь одной команды то endif можно не ставить:

if ( expression ) command

Цикл foreach

Этот цикл является полным аналогом цикла for Bourne Shell.

foreach index_variable (loop_values)

command1

command2

….

end

Если в качестве команды внутри цикла встречается команда break то выполнение цикла прерывается, если команда continue то продолжается но уже со следующим из значений параметра взятым из loop_values.

Цикл while

while (expression )

command1

command2

end

полный аналог цикла while в Bourne shell.

Команда switch

Очень похожа на аналогичный оператор в языке С, является аналогом команды case в Bourne shell

switch ( word )

case string1:

command1

command2

….

breaksw

case string2:

command1

command2

….

breaksw

…..

default:

command1

command2

endsw

Команда безусловного перехода goto

label:

command1

command2

goto label

осуществляет переход на команду следующую за меткой указаной в команде (в данном случае на command1).

Обработка прерываний

onintr label

Эта команда позволяет обрабатывать прерывания скриптов. При выполнении прерывания она выполняет переход на команду стоящей непосредственно за меткой label (аналогично выполнению goto label)

Korn Shell и POSIX shell

2.4.1 Общее знакомство с шеллами

2.4.2 Старт шеллов

2.4.3 Грамматика шеллов

2.4.4 Алиасинг

2.4.5 Возможности подстановок

2.4.6 Командная строчка и история команд

2.4.6 Управление заданиями

2.4.7 Программирование скриптов

2.4.8 Дополнительные команды

2.4.1 Общее знакомство с шеллами

Оба этих шелла базируються на Bourne Shell, но помимо этого они унаследовали много полезных функций Csh. Они рактически на 95% совместимы вверх с Bourne Shell и большинство программ написанных на Bourne Shell будут исполняться на них без изменений. Также следует отметить тот факт что по скорости исполнения они оперережают Bourne Shell.

Основные возможности унаследованные от Csh

· Буфер истории команд.

· Алиасинг

· Массивы

· Целочисленная математика

· Управление заданиями

2.4.2 Старт шеллов

В том случае если Korn или POSIX Shell являються логин-шеллами, после входа в систему и запуска они используют файл /etc/profile и файл .profile если последний существует в домашней директории пользователя. Независимо от того запускается ли шелл после логина или в любой другой момент времени, при старте он анализирует переменную окружения $ENV, которая обычно указывет на файл .profile или .kshrc. Если файл с именем указанным в этой переменной существует то он выполняется.

2.4.3 Грамматика шеллов

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

Механизмы квотинга спецсимволов и расширения имен файлов посредством метасимволов в новых шеллах полностью аналогичны рассмотренным в Bourne Shell. Единственное что следует упомянуть, так это метасимволы ~ , # и % , свойства которых не были описаны раньше.

· метасимвол # используется для задания комментариев. Все что следует за ним игнорируется интерпретатором комманд.

· метасимвол ~ используется при раскрытия путей к файлам и директориям. При этом используются следующие правила:

тильда сама по себе или тильда до слеша / обозначает путь к домашнему каталогу (переменная окружения $HOME)

тильда до знака + раскрывается в текущий каталог (переменная окружения $PWD)

тильда до знака – раскрвывается в предыдущий рабочий каталог (переменная $OLDPWD)

и наиболее полезное правило: если после тильды идет строчка а затем слеш / то выполняется проверка вхождения этой строки в файл пользователей системы ( /etc/passwd ). В случае если эта сточка совпадает с именем пользователя из этого файла то результатом такого расширения пути станет домашний каталог пользователя взятый из этого файла.

· Метасимвол % используется при управлении заданиями и будет рассмотрен позднее.

2.4.4 Алиасинг

Механизм алиасинга в новых шелах аналогичен Csh.

alias -выводит список всех установленных алиасов alias word=command - устанавливает алиасwordна командуcommand

unalias word - снимает алиасword

unalias -a - снимает все алиасы

alias –x word=command - устанавливает алиасwordна командуcommand с экспортом (только для ksh)

Отличительной особенностью ksh от POSIX Shella является возможность экспорта алиасов в другой шелл который не вытесняет текущий (для запуска используется системный вызов fork() на не exec как например в случае если скрипт начинается с #!/bin/…)

2.4.5 Возможности подстановок

К новым подстановкам параметров не рассмотреным при рассмотрении Bourne Shell можно отнести

${parameter#pattern} Если шаблонpatternравен началу параметра

${parameter##pattern} parameter , то вырезать из параметра этот шаблон и результат присвоить выражению. В первой форме шаблон вырезается до первого совпадения, во второй – до последнего.

${parameter%pattern} Если шаблонpatternравен окончанию параметра

${parameter%%pattern} parameter , то вырезать из параметра этот шаблон и результат присвоить выражению. В первой форме шаблон вырезается до первого совпадения, во второй – до последнего.

2.4.6 Командная строчка и история команд

Установив переменную окружения VISUAL на один из системных текстовых редакторов (vi, emacs, gmacs) можно получить возможность редактировать строку ввода используя команды выбраного редактора. При этом помимо редактирования текущей команды, можно выполнять перемещение по истории команд (клавиши ESC j ,ESC k). По умолчанию история команд хранится в файле .sh_history однако его можно изменить установив переменную окружения $HISTFILE . Количество хранимых команд определяется переменной $HISTSIZE. Двойное нажатие на клавишу ESC помогает раскрывать имена файлов в каталогах.