Вы вошли как Гость | Группа "Гости" Приветствую Вас Гость | RSS
mdErrDX5341.lab:...I'm a fool studying schizophrenia as a source of life...=)

Не забудь поспать: Понедельник, 13.05.2024, 12:03
Главная » Статьи » Unix/Linux » Shell

Bash# Переменные
В командной оболочке переменные перед применением обычно не объявляются.
Вместо этого вы создаете их, просто используя(например, когда присваиваете им начальное значение). По умолчанию все переменные считаются строками и хранятся как строки, даже когда им присваиваются числовые значения. Командная оболочка и некоторые утилиты преобразуют строки, содержащие числа, в числовые значения, когда нужно их обработать должным образом. Linux - система. чувствительная к регистру символов, поэтому командная оболочка считает foo и Foo двумя разными переменными, отличающимися от третьей переменной FOO.

В командной оболочке можно получить доступ к содержимому переменной, если перед ее именем внести знак $. Каждый раз, когда вы извлекаете содержимое переменной, вы должны к началу ее имени добавить знак $. Когда вы присваиваете переменной значение, просто используйте имя переменной, которая при необходимости будет создана динамически. Легка проверить содержимое переменной, выведя ее на терминал с помощью команды echo и указав перед именем переменной знак $.

Вы можете увидеть это в действии, если в командной строке будете задавать и проверять разные значения переменной salution:

salutation=Hello
echo $salutation
Hello
salutation="Yes Dear"
echo $salutation
Yes Dear
salutation=7+5
echo $salutation
7+5

*****
Обратите внимание на то, что при наличии пробелов в содержимом переменной ее заключаются в кавычки. Кроме того, не может быть пробелов справа и слева от знака равенства.
*********

Вы можете присвоить переменной пользовательский ввод с помощью команды read. Она принимает один параметр - имя переменной, в которую будут считываться данные, и затем ждет, пока пользователь введет какой-либо текст. Команда read обычно завершается после нажатия пользователем клавишт<Enter>. При чтении переменной с терминала, как правило, заключать ее в кавычки не требуется

read salutation
Wie geth's?
echo $salutation
Wie geth's?

Заключение в кавычки

Прежде чем двигаться дальше, вам следует уяснить одно правило командной оболочки: использование кавычек.

Обычно параметры в сценариях отделяются неотображаемыми символами или знаками форматирования(например, пробелом, знаком табуляции или символом перехода на новую строку). Если вы хотите, чтобы параметр содержал один или несколько неотображаемых символов, его следует заключить в кавычки.

Поведение переменных, таких как $foo, заключенных в кавычки, зависит от вида используемых кавычек. Если вы заключаете в двойные кавычки $-представление переменной, оно во время выполнения командной строки заменяется значением переменной. Если вы заключаете его в одинарные кавычки или апострофы, никакой замены не происходит. вы также можете отменить специальное назначение символа$, вставив перед ним символ \(обратный слеш).

#!/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

Как это работает

Создается переменная myvar, и ей присваивается строка Hi there. Содержимое переменной выводится на экран с помощью команды echo, демонстрирующей, как символ $ раскрывает содержимое переменной. Вы видите, что применение двойных кавычек не влияет на раскрытие содержимой переменной, а одинарные кавычки  и обратный слэш влияют. Вы также применяете команду read для получения строки от пользователя.

Переменные окружения

Когда стартует сценарий командной оболочки, некоторым переменным присваивается начальные значения из окружения или рабочей среды. Обычно такие переменные обозначают прописными буквами, что бы отличать их в сценариях от определенных пользователем переменных(командной оболочки), которые принято обозначать строчными буквами. Формируемые переменные зависят от ваших персональных настроек. Многие из них перечислены на страницах справочных руководств, а основные приведены в таблице

$HOME Исходный каталог текущего пользователя

$PATH Разделенный двоеточиями список каталогов для поиска команд

$PS1 Подсказка или приглашение командной строки. Часто знак $, но в оболочке bash можно применять и более сложные варианты. Например, строка [\u@\h \w]$ - популярный стандарт, сообщающий в подсказке пользователя имя компьютера и текущий каталок, а также знак $

$PS2 Дополнительная подсказка или приглашение, применяемое как приглашение для дополнительного ввода; обычно знак >

$IFS Разделитель полей ввода. Список символов, применяемых для разделения слов при чтении оболочкой ввода, как правило, пробел, знак табуляции и символ перехода на новую строку

$0 Имя сценария командной оболочки

$# Количество передаваемых параметров

$$ ID(идентификатор) процесса сценария оболочки, часто применяемый внутри сценария для генерации уникальных имен временных файлов; например, /tmp/tmpfile_$$

**************
Если вы хотите проверить с помощью команды env <команда>, как работает программа в разных окружениях, познакомьтесь с интерактивным справочным руководством к команде env. Далее в этой главе вы увидите, как задавать переменные окружения в подоболочках(subshells), применяя команду export

Переменные-параметры

Если ваш сценарий вызывается с параметрами, создается несколько дополнительных переменных. Если параметры не передаются, переменная окружения $# все равно существует, но равна 0.

$1,$2,... Параметр, передаваемые сценарию

$* Список всех параметров в единственной переменной, разделенных первым символом из переменной окружения IFS. Если IFS корректируется, способ разделения командной строки на параметры в переменной $* изменяется

$@ Едва различимая вариация $*; не использует переменную окружения IFS, поэтому параметры не сольются, даже если переменная IFS пуста

Легче всего увидеть разницу между переменными-параметрами $* и $@, опробовав их

IFS=''
set foo bar bam
echo "$@"
foo bar bam
echo "$*"
foobarbam
unset IFS
echo "$*"
foo bar bam

Как видите, заключенная в двойные кавычки переменная-параметр $@ представляет позиционные параметры как отдельные поля, независимо от значения переменной окружения IFS. Как правило, если вы хотите получить доступ к параметрам, лучше использовать переменную-параметр $@.
Категория: Shell | Добавил: mdErrDX5341 (28.12.2011)
Просмотров: 3687 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]