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