Оболочка bash похожа на язык программирования, а языки программирования имеют общие особенности. Одним из основных понятий языка программирования является переменная — символ, содержащий значение. Переменные bash — это последовательности символов, если вы не укажете иного с помощью оператора dec! are.
В отличие от многих других языков, в bash не нужно объявлять переменные до их использования.
Имя переменной является строкой, которая должна начинаться с буквы и может содержать буквы, цифры и символ подчеркивания (_). Значение переменной можно получить, указав символ $ перед именем переменной. Рассмотрим сценарий оболочки, присваивающий значение переменной hw, а затем выводящий его экран:

#!/bi n/bash hw="hello world" echo $hw

Переменная hw создана присвоением в строке 2. В строке 3 значение переменной hw заменяется указателем $hw. Поскольку bash и остальные оболочки расценивают пробелы и табуляцию как разделители аргументов команд, а не как обычные аргументы, для их сохранения вы должны поместить всю строку в двойные (") или в одинарные кавычки ('). Разница состоит в том, что переменные оболочки (и другие особенности синтаксиса оболочки) понимаются расширенно в двойных кавычках и буквально — в одинарных. Посмотрите на различия в выводе двух команд echo в следующем сценарии:
admin@serverl:$ cat hello2

#! /Ы n/bash

hw="hello world"
echo "$hw"
echo '$hw'
admin@serverl:$ ./hello2
hello world
$hw
admin@serverl:~$
Вы можете закрепить стандартный вывод команды за переменной с помощью выражения %(иоманда) или '"команда'' (используя обратные кавычки):
admin@serverl:~$ cat today

#!/bin/bash

dt=$(date)
dttoo='date~
echo "Today is $dt"
echo "And so is Sdttoo"
admin@serverl:~$ ./today
Today is Tue Jul 25 14:56:01 CDT 2006
And so is Tue Jul 25 14:56:01 CDT 2006
admin@serverl:$
Особые переменные представляют аргументы командной строки. Символ $, за которым следует номер п, относится к яму аргументу командной строки, начиная с 1. Переменная $0 — это имя самого сценария. Переменная $* содержит все аргументы как одно значениепоследовательность. Затем эти переменные могут быть добавлены в команды, выполняемые сценарием:
admin@serverl:~$ cat files #!/bi n/bash Is Alv $*
admin@serverl:$ ./files hello hello2 today
rwxrxrx 1 admin admin 48 20060725 13:25 hello rwxrxrx 1 admin admin 51 20060725 14:45 hello2 rwxrxrx 1 admin admin 45 20060725 14:49 today admin@serverl:$
Специальная переменная $$ содержит ID текущего процесса. Это может быть использовано для создания уникального временного имени файла. Если одновременно работают множественные копии одного и того же сценария, каждая будет иметь другой процессный ID и, таким образом, другое временное имя файла.
Еще одной полезной переменной является $?, которая содержит возвращаемое состояние наиболее часто выполняемых команд. Мы воспользуемся ею далее в этой главе для проверки успеха или неудачи выполнения программы в сценарии.