Любая командная строка может быть помещена внутрь обратных кавычек (`....`), в результате чего вывод этой командной строки заменит при выполнении саму эту строку. Это называется командная подстановка. Команда или команды, заключенные в обратные кавычки, обрабатываются Shell в первую очередь и их вывод заменяет сами эти команды и обратные кавычки. Это свойство часто используется для присвоения значений переменным Shell. (Переменные Shell рассматриваются в следующем разделе.)
Например:
today=`date`
присваивает строку со значением текущей даты переменной today (например "Tue Nov 26 16:01:09 EST 1985"). Следующая команда сохраняет число зарегистрированных в системе пользователей в переменной users:
users=`who | wc -l`
Любая команда, которая пишет в стандартный вывод, может быть заключена в обратные кавычки. Обратные кавычки могут быть вложены одни в другие, но при этом внутренние должны отделяться обратными косыми чертами (\), например:
logmsg=`echo Your login directory is \`pwd\``
покажет строку "Your login directory is .(имя вашего каталога)". Переменным Shell также можно присваивать значения, используя команды read и line. Команда read считывает строку из стандартного ввода (обычно с терминала) и присваивает отдельные слова всем указанным переменным.
Например, предположим, что команда:
read first init last
прочитала строку вида:
G. A. Snyder
Тогда указанным переменным будут присвоены значения:
first=G. init=A. last=Snyder
Все "лишние" прочитанные слова команда read присваивает последней переменной.
Команда line считывает строку из стандартного ввода и повторяет в стандартном выводе.
В Shell имеется несколько способов создания переменных. Переменная - это имя, которому присвоено текстовое значение. Некоторые переменные являются позиционными параметрами - их значения устанавливаются только в командной строке. Остальные переменные - это просто имена, которым пользователь или сам интерпретатор присвоил текстовые значения.
В среде Shell, из 128 существующих позиционных переменных доступны по именам только 10, это $0, $1, $2, ….,$9. Все остальные расположены в стеке и доступны только после специальной манипуляции, причем действе не имеет обратной силы.
Когда вызывается процедура Shell, то Shell сразу неявно создает позиционные параметры. Имя самой процедуры Shell - в нулевой позиции, в командной строке, присваивается позиционному параметру $0. Первый аргумент команды называется $1 и т.д. Чтобы получить доступ к аргументам в позициях с номером больше 9, можно использовать команду shift. Например, следующую процедуру можно использовать для просмотра позиционных параметров и затем обрабатывать все необходимые файлы:
while test -n "$1"
do case $1 in
-a) A=aoption ; shift;;
-b) B=boption ; shift;;
-c) C=coption ; shift;;
-*) echo "bad option" ; exit 1 ;;
*) process rest of files
esac
done
Пользователь может явно передать необходимые значения этим позиционным параметрам с помощью команды set. Например, команда:
set abc def ghi
присваивает значение "abc" первому позиционному параметру $1, значение "def" - второму $2 и "ghi" - третьему $3. Нулевой позиционный параметр $0 нельзя переопределить таким способом - он всегда относится к имени процедуры Shell.