<Предыдущая | Содержание: | Следующая>
Переменные и константы
Однако есть проблема с нашим скриптом. Обратите внимание, как повторяется строка «Системный информационный отчет»? С нашим крошечным скриптом это не проблема, но давайте представим, что наш скрипт был очень длинным и у нас было несколько экземпляров этой строки. Если бы мы хотели изменить заголовок на что-то другое, нам пришлось бы изменить его в нескольких местах, что может потребовать много работы. Что, если бы мы могли расположить сценарий так, чтобы строка появлялась только один раз, а не несколько раз? Это значительно упростило бы дальнейшее обслуживание сценария. Вот как мы могли это сделать:
#! / Bin / Баш
# Программа для вывода страницы с системной информацией
title = "Отчет о системной информации"
эхо "
$ title
$ title
"
#! / Bin / Баш
# Программа для вывода страницы с системной информацией
title = "Отчет о системной информации"
эхо "
$ title
$ title
"
Создавая переменная названный название и присвоив ему значение «Системный информационный отчет», мы можем воспользоваться расширением параметров и разместить строку в нескольких местах.
Итак, как нам создать переменную? Все просто, мы просто используем это. Когда оболочка встречает переменную, она автоматически создает ее. Это отличается от многих языков программирования, в которых переменные должны быть явно объявленный или определено перед использованием. Оболочка очень небрежно относится к этому, что может привести к некоторым проблемам. Например, рассмотрим этот сценарий, разыгрываемый в командной строке:
[я @ linuxbox ~] $ foo = "да" [я @ linuxbox ~] $ эхо $ foo Да
[я @ linuxbox ~] $ эхо $ дурак
[я @ linuxbox ~] $
[я @ linuxbox ~] $ foo = "да" [я @ linuxbox ~] $ эхо $ foo Да
[я @ linuxbox ~] $ эхо $ дурак
[я @ linuxbox ~] $
Сначала мы присваиваем переменной значение «да». Foo, а затем отобразить его значение с помощью эхо. Затем мы отображаем значение имени переменной, написанное с ошибкой как «дурак», и получаем пустой результат. Это потому, что оболочка успешно создала переменную дурачить когда он встретил его, и дал ему значение по умолчанию ничего или пустое. Из этого мы узнаем, что мы должны уделять пристальное внимание орфографии! Также важно понять, что на самом деле произошло в этом примере. Из нашего предыдущего взгляда на то, как оболочка выполняет расширения, мы знаем, что команда:
[я @ linuxbox ~] $ echo $ foo
[я @ linuxbox ~] $ echo $ foo
подвергается расширению параметров и приводит к:
[me @ linuxbox ~] $ echo да
[me @ linuxbox ~] $ echo да
Тогда как команда:
[я @ linuxbox ~] $ echo $ дурак
[я @ linuxbox ~] $ echo $ дурак
расширяется до:
[я @ linuxbox ~] $ echo
[я @ linuxbox ~] $ echo
Пустая переменная превращается в ничто! Это может нанести ущерб командам, требующим аргументов. Вот пример:
[я @ linuxbox ~] $ foo = foo.txt [я @ linuxbox ~] $ foo1 = foo1.txt [я @ linuxbox ~] $ cp $ foo $ дурак
cp: отсутствует операнд конечного файла после `foo.txt '
[я @ linuxbox ~] $ foo = foo.txt [я @ linuxbox ~] $ foo1 = foo1.txt [я @ linuxbox ~] $ cp $ foo $ дурак
cp: отсутствует операнд конечного файла после `foo.txt '
Для получения дополнительной информации попробуйте `cp --help '.
Для получения дополнительной информации попробуйте `cp --help '.
Мы присваиваем значения двум переменным, Foo и foo1. Затем мы выполняем cp, но неправильно написали имя второго аргумента. После расширения cp Команда отправляет только один аргумент, хотя для этого требуется два.
Есть несколько правил об именах переменных:
1. Имена переменных могут состоять из буквенно-цифровых символов (букв и цифр) и символов подчеркивания.
2. Первый символ имени переменной должен быть буквой или знаком подчеркивания.
3. Использование пробелов и знаков препинания не допускается.
Слово «переменная» подразумевает изменяющееся значение, и во многих приложениях переменные используются таким образом. Однако переменная в нашем приложении, название, используется как постоянная. Константа похожа на переменную в том смысле, что у нее есть имя и значение. Разница в том, что значение константы не меняется. В приложении, которое выполняет геометрические вычисления, мы могли бы определить PI как константа, и присвоить ей значение 3.1415вместо того, чтобы использовать число буквально во всей программе. Оболочка не делает различий между переменными и константами; они в основном предназначены для удобства программиста. Распространенным соглашением является использование прописных букв для обозначения констант и строчных букв для истинных переменных. Мы изменим наш скрипт в соответствии с этим соглашением:
#! / Bin / Баш
# Программа для вывода страницы с системной информацией TITLE= "Системный информационный отчет Для $ HOSTNAME"эхо"
$TITLE
$TITLE
"
#! / Bin / Баш
# Программа для вывода страницы с системной информацией TITLE= "Системный информационный отчет Для $ HOSTNAME"эхо"
$TITLE
$TITLE
"
Мы также воспользовались возможностью, чтобы оживить наш заголовок, добавив значение переменной оболочки
HOSTNAME. Это сетевое имя машины.
Внимание: Оболочка на самом деле предоставляет способ обеспечить неизменность констант с помощью объявлять встроенная команда с -r (только для чтения) вариант. Если бы мы назначили TITLE сюда:
declare -r TITLE = "Заголовок страницы"
оболочка предотвратит любое последующее присвоение TITLE. Эта функция используется редко, но существует для очень формальных сценариев.