Bash → Язык командного интерпретатора bash. Part 1. "Параметры"
Решил написать небольшой цикл постов о языке командного интерпретатора bash. Первый пост описывает параметры, используемые в командной оболочке bash.
Вместо переменных, которые используются в привычных нам языках программирования, в bash используется концепция параметров. Одним из главных критериев, описывающих параметры, являются имена параметров. Именем параметра может быть: слово, состоящее из латинских букв, цифр и знаков подчёркивания (в этом случае первым символом должна быть буква); число или один из следующих символов: *, @, #, ?, $, !, 0, _. Все параметры имеют строковый тип. Перед именем параметра следует ставить знак $, чтобы сослаться на его значение.
Параметры делятся на 3 группы:
— переменные оболочки;
— позиционные параметры;
— специальные параметры.
Теперь поговорим о каждой группе более подробно.
Переменные оболочки
С переменными оболочки можно проводить операции присваивания. Если значение переменной содержит специальные символы, их следует экранировать обратным слешем или кавычками:
Установленные таким образом переменные доступны только внутренним командам оболочки. А как же поступить, чтобы они были доступны и дочерним процессам? Их всего лишь нужно поместить в окружение bash с помощью команды export:
Теперь этот параметр будет доступен программам, запущенным из-под bash. Также упомяну, что param и PARAM не одна и та же переменная, а разные, так как регистр имеет значение. Так как переменная PARAM будет доступна дочерним процессам оболочки, то её можно назвать глобальной.
Можно выполнить следующие действия, чтобы почувствовать вышеописанную разницу:
1. Создайте пустой файл и сделайте вывод двух переменных param и PARAM. Например:
Ctrl+D заканчивает ввод и закрывает файл.
2. Теперь сделайте наш скрипт исполняемым:
3. Определите переменную param и выполните скрипт:
Когда оболочка bash начинает работу, она устанавливает для себя некоторые переменные окружения. Они используются дочерними процессами для установки какой-либо конкретной информации.
Приведу некоторые переменные окружения:
BASH_VERSION – версия командной оболочки;
USER – имя пользователя;
UID, EUID – реальные и эффективный userID
HOME – путь к домашнему каталогу пользователя;
HOSTNAME – имя компьютера;
HOSTTYPE – тип процессора компьютера;
OSTYPE – ОС;
HISTFILE – расположение истории команд;
HISTSIZE – размер истории команд;
LANG – язык текущего сеанса;
LINES – число строк на экране;
COLUMNS – число столбцов на экране;
PS1, PS2, PS3, PS4 – переменные, определяющие вид приглашения bash;
Для того, чтобы просмотреть значения всех текущих переменных текущего сеанса, необходимо выполнить команду set.
Если переменная больше не нужна, её можно разрегистрировать командой unset.
Позиционные параметры
Здесь я буду краток. Имя позиционного параметра представляет собой натуральное число, а значение – аргументы с соответствующими номерами, переданные сценарию или оболочке при их запуске (точкой отсчёта является 1, так как 0 используется одним из специальных параметров).
Специальные параметры
Имена специальных параметров представляет собой специальные символы, перечисленные ниже. Эти параметры исполняют роль шаблонных переменных, подстановку которых производит bash.
$0 – имя выполняемого сценария;
$# — количество позиционных параметров, переданных сценарию;
$_ — последний аргумент предыдущей из выполнявшихся команд;
$? – код завершения последней команды (0 – успешно, другое – ошибка);
$$ — PID текущего процесса;
$! – PID последнего асинхронного процесса;
$* — все позиционные параметры, собранные в одну строку («$1x$2x…$n»);
$@ — все позиционные параметры, подлежащие дальнейшему разбору («$1» «$2» …«$n»).
Оболочка bash позволяет организовать диалоговый ввод значения параметра с помощью команды read:
Здесь команда read считывает значение, введённое пользователем в параметр yesno.
А что, если требуется ввести значение нескольких параметров в одну строку? Тогда необходимо после команды read вписать несколько имён параметров:
Если пользователь ввёл меньше значений, чем требовалось, тогда оставшимся параметрам будет присвоено пустое значение, а если больше – весь остаток строки будет присвоен последнему из перечисленных параметров.
Мой следующий пост охватит подстановки в оболочке bash и использование массивов. Но это только с тем условием, если вам понравится мой текущий пост. Надеюсь, информация была полезной и интересной :).
Вместо переменных, которые используются в привычных нам языках программирования, в bash используется концепция параметров. Одним из главных критериев, описывающих параметры, являются имена параметров. Именем параметра может быть: слово, состоящее из латинских букв, цифр и знаков подчёркивания (в этом случае первым символом должна быть буква); число или один из следующих символов: *, @, #, ?, $, !, 0, _. Все параметры имеют строковый тип. Перед именем параметра следует ставить знак $, чтобы сослаться на его значение.
Параметры делятся на 3 группы:
— переменные оболочки;
— позиционные параметры;
— специальные параметры.
Теперь поговорим о каждой группе более подробно.
Переменные оболочки
С переменными оболочки можно проводить операции присваивания. Если значение переменной содержит специальные символы, их следует экранировать обратным слешем или кавычками:
$ param=”Hello, world!”
$ echo param #вывод имени параметра
param
$ echo $param #вывод значения параметра
Hello, world!
Установленные таким образом переменные доступны только внутренним командам оболочки. А как же поступить, чтобы они были доступны и дочерним процессам? Их всего лишь нужно поместить в окружение bash с помощью команды export:
$ export PARAM=”Hello, world!”
Теперь этот параметр будет доступен программам, запущенным из-под bash. Также упомяну, что param и PARAM не одна и та же переменная, а разные, так как регистр имеет значение. Так как переменная PARAM будет доступна дочерним процессам оболочки, то её можно назвать глобальной.
Можно выполнить следующие действия, чтобы почувствовать вышеописанную разницу:
1. Создайте пустой файл и сделайте вывод двух переменных param и PARAM. Например:
$ cat > script
echo Env variable: $PARAM
echo Local variable: $param
^D
$
Ctrl+D заканчивает ввод и закрывает файл.
2. Теперь сделайте наш скрипт исполняемым:
$ chmod a+x script
3. Определите переменную param и выполните скрипт:
$ param=”Hello, world (from local)”
$ echo $param
Hello, world (from local)
$ ./script
Env variable: Hello, world!
Local variable:
$
Когда оболочка bash начинает работу, она устанавливает для себя некоторые переменные окружения. Они используются дочерними процессами для установки какой-либо конкретной информации.
Приведу некоторые переменные окружения:
BASH_VERSION – версия командной оболочки;
USER – имя пользователя;
UID, EUID – реальные и эффективный userID
HOME – путь к домашнему каталогу пользователя;
HOSTNAME – имя компьютера;
HOSTTYPE – тип процессора компьютера;
OSTYPE – ОС;
HISTFILE – расположение истории команд;
HISTSIZE – размер истории команд;
LANG – язык текущего сеанса;
LINES – число строк на экране;
COLUMNS – число столбцов на экране;
PS1, PS2, PS3, PS4 – переменные, определяющие вид приглашения bash;
Для того, чтобы просмотреть значения всех текущих переменных текущего сеанса, необходимо выполнить команду set.
Если переменная больше не нужна, её можно разрегистрировать командой unset.
$ unset param
Позиционные параметры
Здесь я буду краток. Имя позиционного параметра представляет собой натуральное число, а значение – аргументы с соответствующими номерами, переданные сценарию или оболочке при их запуске (точкой отсчёта является 1, так как 0 используется одним из специальных параметров).
Специальные параметры
Имена специальных параметров представляет собой специальные символы, перечисленные ниже. Эти параметры исполняют роль шаблонных переменных, подстановку которых производит bash.
$0 – имя выполняемого сценария;
$# — количество позиционных параметров, переданных сценарию;
$_ — последний аргумент предыдущей из выполнявшихся команд;
$? – код завершения последней команды (0 – успешно, другое – ошибка);
$$ — PID текущего процесса;
$! – PID последнего асинхронного процесса;
$* — все позиционные параметры, собранные в одну строку («$1x$2x…$n»);
$@ — все позиционные параметры, подлежащие дальнейшему разбору («$1» «$2» …«$n»).
Оболочка bash позволяет организовать диалоговый ввод значения параметра с помощью команды read:
echo –n “Продолжить? (y/n): ”
read yesno
echo $yesno
Здесь команда read считывает значение, введённое пользователем в параметр yesno.
А что, если требуется ввести значение нескольких параметров в одну строку? Тогда необходимо после команды read вписать несколько имён параметров:
read name lastname
Если пользователь ввёл меньше значений, чем требовалось, тогда оставшимся параметрам будет присвоено пустое значение, а если больше – весь остаток строки будет присвоен последнему из перечисленных параметров.
Мой следующий пост охватит подстановки в оболочке bash и использование массивов. Но это только с тем условием, если вам понравится мой текущий пост. Надеюсь, информация была полезной и интересной :).
- +28
- Istergul
- 06 июля 2009, 23:36
Ждем следующих постов:)
Еще довольно интересным может оказаться
если переменная «name» заданна — выведется её значение, если нет то присвоится(и выведется) значение «anonymous».
А так то же самое, но по Ctrl+V
А
Bash я выучил уже давно, но такие статьи здесь очень нужны)
Постараюсь развивать тему bash.
побольше бы таких статей ^^
Сегодня вечером будет третий.
Как раз стимул чтобы начать изучать. Как всегда не доходили руки. :)
Сейчас буду читать остальные топики.