перед его именем:
$ echo $0
bash
Параметры делятся на:
♦ переменные оболочки — о них рассказано в п. 3.4.3;
♦ позиционные параметры — их имена представляют собой натуральное число, а значениями служат аргументы с соответствующими номерами, начиная с 1, переданные сценарию или самой оболочке при их запуске;
♦ специальные параметры — их именами служат перечисленные специальные символы, а назначение сведено в таблицу 8.1. Эти параметры — шаблоны, подстановку которых производит оболочка.
Специальные переменные Таблица 8.1
| Название | Подстановка |
|---|---|
| $0 | Имя выполняемого сценария (или, в интерактивном режиме, — самой оболочки) |
| $# | Количество позиционных параметров, переданных сценарию |
| $_ | Последний аргумент предыдущей из выполнявшихся команд |
| $? | Код завершения последней выполненной команды (напоминаю, что значение 0 говорит об успешном завершении, другое — об ошибочном) |
| $$ | Номер текущего процесса (PID) |
| $! | Номер (PID) последнего асинхронного процесса (команды, выполненной в фоновом режиме) |
| $* | Все позиционные параметры, слитые в одну строку: «$*» эквивалентно «$1x$2x…,$n», где x — первый символ значения переменной IFS (internal field separator), по умолчанию — пробел |
| $@ | Все позиционные параметры, подлежащие дальнейшему разбору: «$@» эквивалентно «$1» «$2» ... «$n» |
Напоминаю, что специальные символы в значениях параметров нужно экранировать. Экранировать одиночный символ можно символом «» (обратный слэш), несколько — апострофами или двойными кавычками. Разница в том, что внутри двойных кавычек выполняются подстановки значений: сравните вывод команд echo '$0' и echo '$0'.
Организовать диалоговый ввод значения переменной можно с помощью встроенной команды read:
echo -n 'Продолжать? (y/n): '
read yesno
echo $yesno
Ключ -n команды echo не выводит символ новой строки в конце сообщения, то есть не переводит строку. Команда read читает значение, введённое пользователем с клавиатуры, и записывает его в переменную yesno. Последняя команда выводит только что введенное значение.
Одной командой read можно прочитать несколько переменных:
read name middle lastname
Пользователь должен ввести значения переменных, разделяя их пробелами, и для окончания ввода нажать <Ввод>. Если введено меньше значений, чем нужно, оставшимся переменным будет присвоена пустая строка. Если больше, то весь остаток строки будет присвоен последней из перечисленных переменных.
8.2. Подстановки
Кроме подстановки обычных переменных (п.3.4.4) и раскрытия шаблонов имен файлов (п.3.4.5), оболочка bash умеет выполнять еще и такие подстановки:
♦ Подстановка тильды:
~ заменяется на имя домашнего каталога пользователя, запустившего сценарий;
~+ заменяется на путь к текущему каталогу;
~- заменяется на путь к предыдущему каталогу.
♦ Раскрытие скобок:
строка1{строка2,строка3...}строкаN заменяется на: строка1строка2строкаN строка1строка3строкаN ...
Пробелов внутри скобок быть не должно. Эта функция полезна, когда нужно применить одну команду к нескольким файлам, не подходящим под общий шаблон:
$ cat /home/den/linuxbook/{intro,param,subst} > glava8
♦ Подстановка арифметических выражений:
$((выражение)) или $[выражение] — эквивалентные формы записи. Внутри выражения выполняются подстановки параметров. Приоритет арифметических операций — обычный, подробнее см. man bash, секция ARITHMETIC EVALUATION.
Например, количество часов, прошедшее с момента запуски оболочки, можно подсчитать командой:
