Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Способы присваивания значений 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; Нарушение авторского права страницы