Основы программирования в Linux
Переменные-параметры перечислены в табл. 2.3.
Таблица 2.3
Переменная-параметр Описание ,$1, ...$2Параметры, передаваемые сценарию $*Список всех параметров в единственной переменной, разделенных первым символом из переменной окружения . ЕслиIFSкорректируется, способ разделения командной строки на параметры в переменнойIFSизменяется$*[email protected]Едва различимая вариация ; не использует переменную окружения$*, поэтому параметры не сольются, даже если переменнаяIFSпустаIFSЛегче всего увидеть разницу между переменными-параметрами
и$*, опробовав их.[email protected]$ <b>IFS=''</b>$ <b>set foo bar bam</b>$ <b>echo "[email protected]"</b>foo bar bam$ <b>echo "$*"</b>foobarbam$ <b>unset IFS</b>$ <b>echo "$*"</b>foo bar bamКак видите, заключенная в двойные кавычки переменная-параметр
представляет позиционные параметры как отдельные поля, независимо от значения переменной окружения[email protected]. Как правило, если вы хотите получить доступ к параметрам, лучше использовать переменную-параметр.IFSПомимо вывода на экран содержимого переменных с помощью команды
, вы также можете прочитать его командойecho(упражнение 2.2).readУпражнение 2.2. Манипулирование параметрами и переменными окруженияВ приведенном далее сценарии показано несколько простых манипуляций переменными. После ввода сценария и записи его в файл try_var не забудьте превратить его в исполняемый файл с помощью команды
.chmod +х try_var#!/bin/shsalutation="Hello"echo $salutationecho "The program $0 is now running"echo "The second parameter was $2"echo "The first parameter was $1"echo "The parameter list wasecho "The user's home directory is $HOME"echo "Please enter a new greeting"read salutationecho $salutationecho "The script is now complete"exit 0Если вы выполните этот сценарий, то получите следующий вывод:
$ <b>./try_var foo bar baz</b>HelloThe program ./try_var is now runningThe second parameter was barThe first parameter was fooThe parameter list was foo bar bazThe user's home directory is /home/rickPlease enter a new greeting<b>Sire</b>SireThe script is now complete $Как это работает
Сценарий создает переменную
, выводит на экран ее содержимое и затем показывает, что уже сформированы и имеют соответствующие значения различные переменные-параметры и переменная окруженияsalutation.$НОМЕДалее в этой главе мы рассмотрим более подробно подстановку параметров.
Условия
Основа всех языков программирования — средства проверки условий и выполнение различных действий с учетом результатов этой проверки. Но прежде чем говорить об этом, давайте рассмотрим условные конструкции, которые можно применять в сценариях командной оболочки, а затем познакомимся с использующими их управляющими структурами.
Сценарий командной оболочки может проверить код завершения любой команды, вызванной из командной строки, включая сценарии, написанные вами. Вот почему так важно всегда включать в создаваемые вами сценарии команду exit с определенным значением.
Команда test или [На практике в большинстве сценариев широко используется команда
или[— логическая проверка командной оболочки. В некоторых системах командыtestи[— синонимы, за исключением того, что при использовании командыtestдля удобочитаемости применяется и завершающая часть[. Наличие команды]может показаться странным, но в программном коде она упрощает синтаксис и делает его более похожим на другие языки программирования.[ПримечаниеЭти команды в некоторых ранних оболочках UNIX вызывают внешнюю программу, но в более современных версиях их стараются делать встроенными. Мы вернемся к этому, когда будем рассматривать команды в следующем разделе.
Поскольку команда
не часто применяется за пределами сценариев командной оболочки, многие пользователи ОС Linux, никогда раньше не писавшие сценариев, пытаются создавать простые программы и называют их test. Если такая программа не работает, вероятно, она конфликтует с командой оболочкиtest. Для того чтобы выяснить, есть ли в вашей системе внешняя команда с данным именем, попытайтесь набрать что-нибудь вродеtestи проверить, какая именно командаwhich testвыполняется в данный момент, или используйте формуtest, чтобы быть уверенным в том, что вы выполняете сценарий из текущего каталога. Если сомневаетесь, примите за правило выполнять свои сценарии, предваряя при запуске их имена комбинацией символов./test../