Материал просмотрен 1,518 раз(а)

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

5 класс, увидел переменную и шокирован: "6+X=10" <—- БУКВА?????? O_O

3 курс, в этой фигне увидел цифру и шокирован не меньше: "sin(x)[ln(Int{a,c,abs(t)}(-inf,+inf))]*6*t*x*tg(Pi)/x" <—— ЦИФРА?????

Хватит юмора, вернёмся к нашим буквам. Буква в данном случае – это переменная величина, которая, к слову, может содержать не только число, но и строку.

При программировании на языке оболочки мы будем иметь дело с переменными двух типов: переменные оболочки и переменные среды. Главное отличие – переменные среды доступны другим сценариям и программам, а переменные оболочки – только данному сценарию.

К слову, это ещё очень хорошо, что переменные не строго типизированны. То есть нам не нужно объявлять заранее, определять их тип. Здесь всё хранится в виде строк.

Присваиваем значение переменной.

varX=100

Теперь в переменной varX хранится значение 100. Как вывести его? Да очень просто. Поставим символ значения

echo $varX.

Кстати, иногда встречается запись ${varX} – это абсолютно то же самое. Оно работает не лучше и не хуже. Просто позволяет кому-то сделать код более читаемым. Хотите – используйте, не хотите – не используйте.

varY=$varX

теперь у нас две переменные, в которых хранится значение 100.

Использование переменных в других скриптах возможно посредством экспорта.

Экспортировать переменную в среду можно командой export. Обратите внимание, что эта переменная будет доступна только(!) для тех скриптов, которые инициированны выполняемым скриптом. Это можно представить как затопление водой многоэтажного дома. Если из нашего скрипта запустить на выполнение другой скрипт, то наша экспортированная переменная будет там доступна (вода течёт вниз), и если в новом скрипте вызвать ещё один скрипт – то там она тоже будет доступна. В общем во всех дочерних скриптах будет доступна экспортированная переменная. Но вот вверх передать это значение не получится. То есть нельзя передать экспортом значение переменной в скрипт или оболочку, которая запустила наш скрипт.

содержимое скрипта script1.sh:

varX=100
export varX
sh script2.sh
echo $varY

содержимое скрипта script2.sh

echo $varX
varY=300
export varY

При выполнении первого скрипта происходит экспорт переменной $varX, затем запускается скрипт script2.sh, внутри которого будет доступна переменная $varX (echo её выведет), затем экспортируется переменная $varY, но в скрипте script1.sh она доступна не будет! Поскольку script1.sh – это родительский скрипт. Вы можете сами убедиться в этом.

А что же делать, если нужно передать значение на уровень выше? Использовать переменные среды.