Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Способы присваивания значений shell-переменным



Имя shell-переменной – это начинающаяся с буквы последовательность букв, цифр и подчеркиваний. Значение shell-переменной – всегда строка символов!

Из предыдущих лабораторных работ известен способ присвоить значение переменной с помощью команды " read" в диалоговом режиме. Обычно команде " read" в командном файле предшествует команда " echo" , которая позволяет предварительно выдать какое-то сообщение на экран. Например:

echo -n " Введите трехзначное число: "

Read x

При выполнении этого фрагмента командного файла, после вывода на экран сообщения

Введите трехзначное число:

интерпретатор остановится, и будет ждать ввода значения с клавиатуры. Если вы ввели, скажем, " 753" то это и станет значением переменной " x".

Одна команда " read" может прочитать (присвоить) значения сразу для нескольких переменных. Если переменных в " read" больше, чем их введено (через пробелы), оставшимся присваивается пустая строка. Если передаваемых значений больше, чем переменных в команде " read", то лишние игнорируются.

Существуют также и другие способы присваивания значений переменным.

1. Для присваивания значений переменным может использоваться оператор присваивания " =".

var_1=13 - " 13" - это не число, а строка из двух цифр.

var_2=" ОС UNIX" - здесь двойные кавычки (" " ) необходимы, так как в строке есть пробел.

Обратим внимание на то, что, как переменная, так и ее значение должны быть записаны без пробелов относительно символа " =". Кстати, как видно из примеров, первым словом в командной строке может стоять не только имя команды, но и присваивание значения переменной. Об этом как раз и говорит наличие в беспробельной строке символов наличие (незаэкранированного) символа " =".

1. Запись

DAT=`date`

приводит к тому, что сначала выполняется команда " date" (обратные кавычки говорят о том, что сначала должна быть выполнена заключенная в них команда), а результат ее выполнения, вместо выдачи на стандартный выход, приписывается в качестве значения переменной, в данном случае " DAT".

При обращении к shell-переменной необходимо перед именем ставить символ " $". Так команды

echo $var_2

echo " var_2 = $var_2"

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

ОС UNIX

var_2 = ОС UNIX

То, что здесь присутствуют пробелы между именем переменной и символом присваивания, а также между символом присваивания и значением, так это потому, что здесь мы имеем дело лишь с текстом, куда подставлены значения переменных. Там, где действительно выполняется присваивание, пробелы в этих местах НЕДОПУСТИМЫ. Присваивание, скажем, w= означает присваивание переменной " w" пустой строки. Но и пустую строку лучше присваивать аккуратно, например w=" ".

Для того, чтобы имя переменной не сливалось со строкой, следующей за именем переменной, используются фигурные скобки.

Пусть a=c: /temp/bin/
тогда

/cat c: /temp/bin/protocol.txt

и

/cat ${a}protocol.txt

равноценны (т.е. " cat" выдаст на экран содержимое одного и того же файла).

Практическая (лабораторная) работа:

1.Создайте в текущем каталоге файл protocol.txt, занесите в него строку

Протокол выполнения Л.Р №6

2. Задайте значения переменным var_1=13, var_2, DAT, a.

3. Выведите значения этих переменных в файл protocol.txt.


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

Рассмотрим более подробно приемы экранирования, используемые в 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

Тогда

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

В трех последних случаях использована команда " eval" (от evaluate - означивать), которая в подставленной в нее (в качестве аргумента) команде выполняет означивание переменных (если таковые имеются). В результате значение " A" остается прежним, поскольку " A" имеет значение " 22". А переменные " B" и " C" имеют значение " $x". За счет означивания, которое было выполнено командой " eval" - evaluated " B" и " C" дают значения " 22".

Еще один пример на " eval". Пусть

w=\$v v=\$u u=5

В результате выполнения команд

echo $w

eval echo $w

eval eval echo $w

на экран будет выведено

$v

$u

5

Приведем еще примеры, связанные с экранированием перевода строки. Пусть переменной " string" присвоено значение " массива" 2x3:

Abc

Def

Обратим внимание, что для избежания присваивания лишних пробелов вторая строка массива начата с первой позиции следующей строки:

string=" abc

def"

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

echo $string

echo '$string'

echo " $string"

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

Abc def

$string

Abc

Def

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

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

cat f1 | grep -h result | sort | cat -b > f2

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

cat f1 | grep -h \

result | sort | cat -b > f2


Поделиться:



Последнее изменение этой страницы: 2019-03-30; Просмотров: 137; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.015 с.)
Главная | Случайная страница | Обратная связь