Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Подстановка значений переменных






Процедура подстановки выполняется shell-ом каждый раз когда надо обработать значение переменной если используется следующая конструкция: первый вид подстановки

$имя_переменной -. на место этой конструкции будет подставлено значение переменной.

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

Аналогичного результата можно достичь и следующим образом:

“имя_переменной”

Значения переменных могут представлять собой:

— абсолютные числовые или символьные значения,

— команды,

— аргументы команд или целиком командные строки.

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

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

$echo $HOME

/home/lev

$filname=$HOME/f1

$more $filname

< текст файла f1 из каталога lev>

$

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

 

Если в строке несколько присваиваний, то последовательность их выполнения - справа налево.

Пример 1.

$ z=$y y=123

$ echo $z $y

123 123

$ y=abc z=$y

$ echo “z”

 

$ echo “y”

abc

$

 

Пример 2.

$ var=/user/lab/ivanov

$ cd $var

$ pwd

/udd/lab/ivanov

$

Таким образом, задано и установлено имя текущего каталога.

Пример 3.

$ namdir='ls'

$ $namdir

fil1

fil2

fil3

...

$

В данном примере переменной namdir присвоено значение, которое затем используется в качестве командной строки запускаемой команды. Это команда ls.

Второй вид подстановки – подстановка результатов работы команды вместо самой команды.

 

Пример 4.

$ filnam=`ls`

$ echo $filnam

fil1

fil2

fil3

...

$

В данном случае команда ls непосредственно выполняется уже в первой строке, и переменной filnam присваивается результат ее работы.

Пример 5.

$ A=1 B=2

$ dat=" $A + $B"

$ echo $dat

1 + 2

$

С переменными можно выполнять арифметические действия как и с обычными числами c использованием специального оператора:

expr - вычисление выражений.

Для арифметических операций, выполнимых командой expr, используются операторы:

+ сложение;

- вычитание;

\* умножение (обратная прямая скобка \ используется для отмены действия управляющих символов, здесь *);

/ деление нацело;

% остаток от деления.

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

= равно;! = не равно;

\< меньше; \< = меньше или равно;

\> больше; \> = больше или равно.

Символы * < > необходимо экранировать, как показано, чтобы отменить их специальный смысл - шаблон имен файлов (для *) и перенаправление потоков ввода и вывода (для < и >). Результатом операции арифметического сравнения чисел командой expr является вывод ею кода возврата числа 0 (true) или 1 (false).

Все операнды и операторы являются самостоятельными аргументами команды expr и поэтому должны отделяться друг от друга и от имени команды expr пробелами.

Пример 6.

# Текст процедуры:

a=2

a=`expr $a + 7`

b=`expr $a / 3`

c=`expr $a - 1 + $b`

d=`expr $c % 5`

e=`expr $d - $b`

echo $a $b $c $d $e

 

#Результат работы процедуры:

9 3 11 1 -2

Команда expr выводит результат вычисления на экран. Поэтому, если он не присвоен никакой переменной, то не может быть использован в программе.

При решении логических задач, связанных с обработкой символьных строк (текстов) команда expr может быть использована, например, как средство для подсчета символов в строках или для вычленения из строки цепочки символов.

Операция обработки строк символов задается кодом операции

": " и шаблонами. В частности:

'.*' - шаблон для подсчета числа символов в строке,

'...\(.*\)....' - шаблон для выделения подстроки удалением символов строки, соответствующих точкам в шаблоне.

 

Пример 7.

$ m=aaaaaa

$ expr $m: '.*'

$

Пример 8.

$ n=abcdefgh

$ expr $n: ✧...\(.*\)..'

def

$

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

 

Третий вид подстановки - применяется для подстановки команд или целых shell-процедур. Используется для замены кода команды или текста процедуры на результат их выполнения в той же командной строке:

$(командная_строка) - подстановка осуществляется также перед запуском на исполнение командной строки.

Эта форма подстановки является альтернативой рассмотренной выше конструкциии, использующей заключение команды между знаками тупого ударения:

`командная_строка`, когда также выполняется процедура подстановки.

В данном случае в качестве подставляемой команды может быть использована также любая имеющая смысл sh-процедура. Shell просматривает командную строку и выполняет все команды между открывающей и закрывающей скобками.

Рассмотрим примеры присвоения значений и подстановки значений локальных переменных.

 

Пример 9.

$ A='string n'

$ count=$(expr $A: '.*')

$ echo $count

$

#Продолжение примера:

$ B=$(expr $A: '..\(.*\))

$ echo $B

ring

$

Рассмотрим пример на разработку простейшей линейной процедуры обработки переменных средствами языка shell.

ЗАДАНИЕ: Создать файл, содержащий процедуру сложения двух чисел. Числа передаются в виде параметров при обращении к процедуре. Выполнить процедуру.

 

$ cat> comf

SUM=$(expr $1 + $2)

echo " $1 + $2 = $SUM"

< Ctrl*D>

$ sh comf 3 5

3 + 5 = 8

$

 

На экране можно просмотреть все заведенные локальные переменные с помощью известной команды:

$ set

$

 

Удаление переменных:

$unset перем1 [перем2........]

$






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.