Литмир - Электронная Библиотека
Содержание  
A
A
Упражнение 2.14. Экспорт переменных

1. Первым представим сценарий export2.

#!/bin/sh

echo "$foo"

echo "$bar"

2. Теперь сценарий export1. В конце сценария запускается export2.

#!/bin/sh

foo="The first meta-syntactic variable"

export bar="The second meta-syntactic variable"

export2

Если вы запустите их, то получите следующий результат.

$ <b>./export1</b>

The second meta-syntactic variable

$

Как это работает

Сценарий export2 просто выводит значения двух переменных. В сценарии export1 задаются значения обеих переменных, но только переменная bar помечается как экспортируемая, поэтому, когда впоследствии запускается сценарий export2, значение переменной

foo
потеряно, а значение переменной
bar
экспортировано во второй сценарий. На экране появляется пустая строка, поскольку
$foo
ничего не содержит и вывод переменной со значением
null
приводит к отображению новой строки.

После того как переменная была экспортирована из командной оболочки, она экспортируется в любые сценарии, запускаемые из этой оболочки, и в любые командные оболочки, которые в свою очередь запускают эти сценарии, и т.д. Если бы сценарий export2 вызвал другой сценарий, в нем переменная

bar
также была бы доступна.

Примечание

Команды

set -а
или
set -allexport
экспортируют все переменные соответственно.

expr

Команда

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

х=`expr $x + 1`

Символы

``
(обратная кавычка или обратный апостроф) заставляют переменную
х
принять результат выполнения команды
expr $х + 1
. Ее можно также записать с помощью синтаксической конструкции
$( )
вместо обратной кавычки, например, следующим образом:

х=$(expr $х + 1)

Команда expr обладает большими возможностями, с ее помощью можно вычислять различные выражения. Основные виды вычислений перечислены в табл. 2.6.

Таблица 2.6

Вычисление выражения Описания
<i>Выражение1 | Выражение2</i>
<i>Выражение1</i>
, если
Выражение1
не равно нулю, в противном случае
Выражение2
<i>Выражение1</i> &amp; <i>Выражение2</i>
Нуль, если оба выражения равны нулю, в противном случае
Выражение1
<i>Выражение1</i> = <i>Выражение2</i>
Равенство
<i>Выражение1</i> &gt; <i>Выражение2</i>
Больше чем
<i>Выражение1</i> &gt;= <i>Выражение2</i>
Больше или равно
<i>Выражение1</i> &lt; <i>Выражение2</i>
Меньше чем
<i>Выражение1</i> &lt;= <i>Выражение2</i>
Меньше или равно
<i>Выражение1</i> != <i>Выражение2</i>
Неравенство
<i>Выражение1</i> + <i>Выражение2</i>
Сложение
<i>Выражение1</i> — <i>Выражение2</i>
Вычитание
<i>Выражение1</i> * <i>Выражение2</i>
Умножение
<i>Выражение1</i> / <i>Выражение2</i>
Деление нацело
<i>Выражение1</i> % <i>Выражение2</i>
Остаток от деления нацело

В современных сценариях вместо команды

expr
обычно применяется более эффективная синтаксическая конструкция
$((...))
, которая будет описана далее в этой главе.

printf

Команда

printf
есть только в современных командных оболочках. Группа X/Open полагает, что ее следует применять вместо команды
echo
для генерации форматированного вывода, несмотря на то, что, кажется, лишь немногие следуют этому совету.

У команды следующая синтаксическая запись.

<b>printf</b><i> &quot;строка формата&quot; параметр1 параметр2 ...</i>

Строка формата очень похожа с некоторыми ограничениями на применяемую в языках программирования С и С++. Главным образом не поддерживаются числа с плавающей точкой, поскольку все арифметические операции в командной оболочке выполняются над целыми числами. Строка формата состоит из произвольной комбинации литеральных символов, escape-последовательностей и спецификаторов преобразования. Все символы строки формата, отличающиеся от

\
и
%
, отображаются на экране при выводе.

В табл. 2.7 приведены поддерживаемые командой escape-последовательности.

Таблица 2.7

Escape-последовательность Описание
\&quot;
Двойная кавычка
\\
Символ обратный слэш
\a
Звуковой сигнал тревоги (звонок колокольчика или прерывистый звуковой сигнал)
\b
Символ Backspace (стирание слева)
\c
Отбрасывание последующего вывода
\f
Символ Form feed (подача бумаги)
\n
Символ перехода на новую строку
\r
Возврат каретки
\t
Символ табуляции
\v
Символ вертикальной табуляции
\ooo
Один символ с восьмеричным значением
ooo
\xHH
Один символ с шестнадцатеричным значением
HH
28
{"b":"285844","o":1}