![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Подстановка значений переменных
Процедура подстановки выполняется 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........] $
|