Теперь, когда мы рассмотрели пример простой программы командной оболочки, пришло время углубиться в функциональные возможности программирования средствами командной оболочки. Командная оболочка — довольно легкий для изучения язык программирования, в немалой степени потому, что легко проверить в интерактивном режиме работу небольших фрагментов программы, прежде чем собирать их в большие сценарии. Командную оболочку bash можно использовать для создания довольно больших структурированных программ. В нескольких последующих разделах мы обсудим такие темы:
□ переменные: строки, числа, переменные окружения и параметры;
□ условия: булевы или логические выражения (Booleans);
□ управление выполнением программы: if
, elif
, for
, while
, until
, case
;
□ списки;
□ функции;
□ команды, встроенные в командную оболочку;
□ получение результата выполнения команды;
□ встроенные (here) документы.
Переменные
В командной оболочке переменные перед применением обычно не объявляются. Вместо этого вы создаете их, просто используя (например, когда присваиваете им начальное значение). По умолчанию все переменные считаются строками и хранятся как строки, даже когда им присваиваются числовые значения. Командная оболочка и некоторые утилиты преобразуют строки, содержащие числа, в числовые значения, когда нужно их обработать должным образом. Linux — система, чувствительная к регистру символов, поэтому командная оболочка считает foo
и Foo
двумя разными переменными, отличающимися от третьей переменной FOO
.
В командной оболочке можно получить доступ к содержимому переменной, если перед ее именем ввести знак $
. Каждый раз, когда вы извлекаете содержимое переменной, вы должны к началу ее имени добавить знак $
. Когда вы присваиваете переменной значение, просто используйте имя переменной, которая при необходимости будет создана динамически. Легко проверить содержимое переменной, выведя ее на терминал с помощью команды echo
и указав перед именем переменной знак $
.
Вы можете увидеть это в действии, если в командной строке будете задавать и проверять разные значения переменной salutation
:
$ salutation=Hello
$ echo $salutation
Hello
$ salutation="Yes Dear"
$ echo $salutation
Yes Dear
$ salutation=7+5
$ echo $salutation
7+5
Обратите внимание на то, что при наличии пробелов в содержимом переменной ее заключают в кавычки. Кроме того, не может быть пробелов справа и слева от знака равенства.
Вы можете присвоить переменной пользовательский ввод с помощью команды read
. Она принимает один параметр — имя переменной, в которую будут считываться данные, и затем ждет, пока пользователь введет какой-либо текст. Команда read
обычно завершается после нажатия пользователем клавиши
$ read salutation
Wie geht's?
$ echo $salutation
Wie geht's?
Прежде чем двигаться дальше, вам следует уяснить одно правило командной оболочки: использование кавычек.
Обычно параметры в сценариях отделяются неотображаемыми символами или знаками форматирования (например, пробелом, знаком табуляции или символом перехода на новую строку). Если вы хотите, чтобы параметр содержал один или несколько неотображаемых символов, его следует заключить в кавычки.
Поведение переменных, таких как $foo
, заключенных в кавычки, зависит от вида используемых кавычек. Если вы заключаете в$
-представление переменной, оно во время выполнения командной строки заменяется значением переменной. Если вы заключаете его в$
, вставив перед ним символ \
(обратный слэш).
Выполним упражнение 2.1.
В этом упражнении показано, как кавычки влияют на вывод переменной:
#!/bin/sh
myvar="Hi there"
echo $myvar
echo "$myvar"
echo '$myvar'
echo \$myvar
echo Enter some text
read myvar
echo '$myvar' now equals $myvar
exit 0
Данный сценарий ведет себя следующим образом:
$ ./variable
Hi there
Hi there
$myvar
$myvar
Enter some text
Hello World
$myvar now equals Hello World
Как это работает