3.2. Экранирование

Рассмотрим более подробно приемы экранирования, используемые в shell. В качестве

средств экранирования используются двойные кавычки (" "), одинарные кавычки ('

') и бэк-слэш (\).

Из примеров очевидно их действие:

Можно в одной строке записывать несколько приcваиваний.

x=22 y=33 z=$x

A="$x" B='$x' C=\$x

D="$x + $y + $z" E='$x + $y + $z' F=$x\ +\ $y\ +\ $z

(присваивание G=$x+$y не было бы выполнено из-за пробелов)

Тогда

echo A = $A B = $B C = $C

echo D = $D E = $E F = $F

eval echo evaluated A = $A

eval echo evaluated B = $B

eval echo evaluated C = $C

Выдадут на экран

A = 22 B = $x C = $x

D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22

evaluated A = 22

evaluated B = 22

evaluated C = 22

Приведем еще примеры, связанные с экранированием перевода строки. Пусть

переменной "string" присвоено значение "массива" 2x3:

abc

def

Обратим внимание, что для избежания присваивания лишних пробелов вторая строка

массива начата с первой позиции следующей строки:

string="abc

def"

Тогда три варианта записи переменной в команде "echo"

echo $string

echo '$string'

echo "$string"

дадут соответственно три различных результата:

abc def

$string

abc

def

а последовательность команд

echo "str_1

str_2" > file_1

echo 'str_1

str_2' > file_2

cat file_1 file_2

даст выдаст последовательно одинаковые файлы file_1 и file_2:

str_1

str_2

str_1

str_2

Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ,

что позволяет использовать специальные символы просто как символы,

представляющие сами себя (он может экранировать и сам себя - \\), но в командном

файле бэк-слэш позволяет об'единять строки в одну (экранировать конец строки).

Например, приводившийся ранее пример командной строки:

cat file_1 grep -h result sort cat -b > file_2

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

cat file_1 grep -h \

result sort cat -b > file_2

Кстати, эффект продолжения командной строки обеспечивает и символ конвейера. В

данном случае это может дать более симпатичный результат, например:

cat file_1

grep -h result

sort

cat -b > file_2

3.3. Манипуляции с shell-переменными

Несмотря на то, что shell-переменные в общем случае воспринимаются как строки,

т. е. "35" - это не число, а строка из двух символов "3" и "5", в раде случаев

они могут интерпретироваться иначе, например, как целые числа.

Разнообразные возможности имеет команда "expr".

Проиллюстрируем некоторые на примерах:

Выполнение командного файла:

x=7 y=2

a=`expr $x + $y` ; echo a=$a

a=`expr $a + 1` ; echo a=$a

b=`expr $y - $x` ; echo b=$b

c=`expr $x '*' $y` ; echo c=$c

d=`expr $x / $y` ; echo d=$d

e=`expr $x % $y` ; echo e=$e

выдаст на экран

a=9

a=10

b=-5

c=14

d=3

e=1

Операция умножения ("*") обязательно должна быть заэкранирована, поскольку в

shell этот значок воспринимается, как спецсимвол, означающий, что на это место

может быть подставлена любая последовательность символов.

С командой "expr" возможны не только (целочисленные) арифметические операции, но

и строковые:

A=`expr 'cocktail' : 'cock'` ; echo $A

B=`expr 'cocktail' : 'tail'` ; echo $B

C=`expr 'cocktail' : 'cook'` ; echo $C

D=`expr 'cock' : 'cocktail'` ; echo $D

На экран будут выведены числа, показывающее число совпадающих символов в

цепочках (от начала). Вторая из строк не может быть длиннее первой :

4

0

0

0

3.4. Экспорт переменных

В ОС UNIX существует понятие процесса. Процесс возникает тогда, когда

запускается на выполнение какая-либо команда.

Например, при наборе на клавиатуре "р <Enter>" порождается процесс "р". В свою

очередь "р" может породить другие процессы. Допустим, что "р" вызывает "р1" и

"р2", которые последовательно порождают соответствующие процессы.

У каждого процесса есть своя среда - множество доступных ему переменных.

Например, до запуска "р" уже существовала среда, в которой уже были определены

некоторые переменные. Запуск "р" порождает новую среду; уже в ней будут

порождены "р1" и "р2".

Переменные локальны в рамках процесса, в котором они объявлены, т.е. где им

присвоены значения. Для того, чтобы они были доступны и другим порождаемым

процессам, надо передать их явным образом. Для этого используется встроенная

команда "export".


Информация о работе «Программирование на Shell»
Раздел: Информатика, программирование
Количество знаков с пробелами: 39235
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
89611
3
4

... не зависимый от языка способ создания кода и привязки его к запросам Web-страниц, — .NET Web Forms — управляемую событиями программную модель взаимодействия с элементами управления. Она дела­ет программирование Web-страниц аналогичным программи­рованию форм Visual Basic. ASP.NET содержит развитые сред­ства управления сеансами и функции защиты. Она надежнее, и производительность ее значительно выше ...

Скачать
9700
0
0

... "проверки заразности" (taint checks) в Perl? Как их включить? Как мы видели, одна из наиболее часто встречающихся проблем с безопасностью при программировании CGI - передача оболочке ОС пользовательских переменных без их проверки. Perl предлагает механизм проверки "заразности", который не позволяет этого делать. Любая переменная, которая проинициирована данными за пределами программы (включая ...

Скачать
43471
0
3

льный для каждого маршрута): "c: Курсовая моя < название маршрута > .txt" В таких файлах информация представлена например в следующем виде: автобус, 512 водитель, Батуров П.П. кондуктор, Иванова И.И. автобус, 513 водитель, Рябова Т.И. кондуктор, Шишкова Ю.М. автобус, 514 водитель, Продидж Н.Н. кондуктор, Мартысюк С.С. остановка, , 405, 4680 остановка, , 915, 2730 остановка, , ...

Скачать
374863
43
0

... интерфеса и интерфейса локольной сети ·     Предложение о выборе вариантов загрузки При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика ...

0 комментариев


Наверх