Основы программирования в Linux
$ <b>echo $salutation</b>Hello$ <b>salutation="Yes Dear"</b>$ <b>echo $salutation</b>Yes Dear$<b> salutation=7+5</b>$ <b>echo $salutation</b>7+5ПримечаниеОбратите внимание на то, что при наличии пробелов в содержимом переменной ее заключают в кавычки. Кроме того, не может быть пробелов справа и слева от знака равенства.
Вы можете присвоить переменной пользовательский ввод с помощью команды
. Она принимает один параметр — имя переменной, в которую будут считываться данные, и затем ждет, пока пользователь введет какой-либо текст. Командаreadобычно завершается после нажатия пользователем клавиши <Enter>. При чтении переменной с терминала, как правило, заключать ее значения в кавычки не требуется:read$ <b>read salutation</b>Wie geht's?$ <b>echo $salutation</b>Wie geht's?Заключение в кавычкиПрежде чем двигаться дальше, вам следует уяснить одно правило командной оболочки: использование кавычек.
Обычно параметры в сценариях отделяются неотображаемыми символами или знаками форматирования (например, пробелом, знаком табуляции или символом перехода на новую строку). Если вы хотите, чтобы параметр содержал один или несколько неотображаемых символов, его следует заключить в кавычки.
Поведение переменных, таких как
, заключенных в кавычки, зависит от вида используемых кавычек. Если вы заключаете в двойные кавычки$foo-представление переменной, оно во время выполнения командной строки заменяется значением переменной. Если вы заключаете его в одинарные кавычки или апострофы, никакой замены не происходит. Вы также можете отменить специальное назначение символа$, вставив перед ним символ$(обратный слэш).\Выполним упражнение 2.1.
Упражнение 2.1. Игра с переменнымиВ этом упражнении показано, как кавычки влияют на вывод переменной:
#!/bin/shmyvar="Hi there"echo $myvarecho "$myvar"echo '$myvar'echo \$myvarecho Enter some textread myvarecho '$myvar' now equals $myvarexit 0Данный сценарий ведет себя следующим образом:
$ <b>./variable</b>Hi thereHi there$myvar$myvarEnter some text<b>Hello World</b>$myvar now equals Hello WorldКак это работает
Создается переменная
, и ей присваивается строкаmyvar. Содержимое переменной выводится на экран с помощью командыHi there, демонстрирующей, как символechoраскрывает содержимое переменной. Вы видите, что применение двойных кавычек не влияет на раскрытие содержимого переменной, а одинарные кавычки и обратный слэш влияют. Вы также применяете команду$для получения строки от пользователя.readПеременные окруженияКогда стартует сценарий командной оболочки, некоторым переменным присваиваются начальные значения из окружения или рабочей среды. Обычно такие переменные обозначают прописными буквами, чтобы отличать их в сценариях от определенных пользователем переменных (командной оболочки), которые принято обозначать строчными буквами. Формируемые переменные зависят от ваших персональных настроек. Многие из них перечислены на страницах справочных руководств, а основные приведены в табл. 2.2.
Таблица 2.2
Переменная окружения Описание $НОМЕИсходный каталог текущего пользователя $PATHРазделенный двоеточиями список каталогов для поиска команд $PS1Подсказка или приглашение командной строки. Часто знак , но в оболочке bash можно применять и более сложные варианты. Например, строка$— популярный стандарт, сообщающий в подсказке пользователя имя компьютера и текущий каталог, а также знак[\[email protected]\h \w]$$$PS2Дополнительная подсказка или приглашение, применяемое как приглашение для дополнительного ввода; обычно знак >$IFSРазделитель полей ввода. Список символов, применяемых для разделения слов при чтении оболочкой ввода, как правило, пробел, знак табуляции и символ перехода на новую строку $0Имя сценария командной оболочки $#Количество передаваемых параметров $$ID (идентификатор) процесса сценария оболочки, часто применяемый внутри сценария для генерации уникальных имен временных файлов; например, /tmp/tmpfile_$$ ПримечаниеЕсли вы хотите проверить с помощью команды
, как работает программа в разных окружениях, познакомьтесь с интерактивным справочным руководством к командеenv <<i>команда</i>>. Далее в этой главе вы увидите, как задавать переменные окружения в подоболочках (subshells), применяя командуenv.exportПеременные-параметрыЕсли ваш сценарий вызывается с параметрами, создается несколько дополнительных переменных. Если параметры не передаются, переменная окружения
все равно существует, но равна 0.$#