День сегодня какой-то сумасшедший, троить жестко начинаю, но раз обещал еще один пост, значит нужно сделать.
Как проверить, определена ли переменная в bash скрипте? Давай разберемся.
К примеру мне нужно установить переменную CRAZYDAY и выполнить определенные действия в моём скрипте. Если переменная CRAZYDAY задана, то срабатывает первая логика, если нет, то другая.
Чтобы узнать определена ли переменная я могу передать параметр -z условному выражению if.
Когда я запущу эти скрипты, не установив переменную CRAZYDAY, я получу результат LOGIC 1. Для того что бы получить LOGIC 2, я должен сделать:
Теперь давай разберем как работает:
Вместо x можно написать хоть что, будет работать. Но в бест практиках рекомендуют использовать именно x ну или y.
Есть и другие способы узнать задана ли переменная, но они более гиковские и совсем не человечные, поэтому опущу этот момент чтобы тебя не шокировать.
set -x = включить режим дебага
set +x = выключить режим дебага
Добавить пока больше нечего, изучай. Завтра снова увидимся, очередной CRAZYDAY. Ну и доброй ночи тебе!
tags: #bash #linux
—
🟢 Подпишись: @bashdays
Как проверить, определена ли переменная в bash скрипте? Давай разберемся.
К примеру мне нужно установить переменную CRAZYDAY и выполнить определенные действия в моём скрипте. Если переменная CRAZYDAY задана, то срабатывает первая логика, если нет, то другая.
Чтобы узнать определена ли переменная я могу передать параметр -z условному выражению if.
if [ -z ${CRAZYDAY+x} ];либо с помощью команды test
then
echo "LOGIC 1"
else
echo "LOGIC 2"
fi
if test -z ${CRAZYDAY+y}Команда test применяется для проверки условия. Она вычисляет выражение и, если его значение - истина, возвращает код завершения 0; иначе - ненулевое значение. Ненулевой код возвращается и в случае, когда выражение отсутствует. При проверке прав доступа используется действующий идентификатор пользователя.
then
echo "LOGIC 1"
else
echo "LOGIC 2"
fi
Когда я запущу эти скрипты, не установив переменную CRAZYDAY, я получу результат LOGIC 1. Для того что бы получить LOGIC 2, я должен сделать:
export CRAZYDAY=somestrРезультатом будет LOGIC 2. Чтобы снова получить LOGIC 1, мне нужно сбросить установленную переменную с помощью команды:
./script.sh
unset CRAZYDAY
.Теперь давай разберем как работает:
${CRAZYDAY+x}
Выполняем последовательно команды и смотрим на выхлоп дебага:set -xвернуло:
./script.sh
+ '[' -z ']'далее:
+ echo LOGIC 1
LOGIC 1
CRAZYDAY=some ./script.shпоявился параметр x, с ним и идет сравнение, x=some
+ '[' -z x ']'далее:
+ echo LOGIC 2
LOGIC 2
export CRAZYDAY=strвернуло то же самое
./script.sh
+ '[' -z x ']'ну а теперь так:
+ echo LOGIC 2
LOGIC 2
unset CRAZYDAYвернуло тоже самое как и в первом примере
./script.sh
+ '[' -z ']'По сути x это расширение параметра bash, если переменная CRAZYDAY не задана, она не имеет в себе никакого значения. Ну а если задано, то все что внутри переменной CRAZYDAY заменяется просто на x и потом уже сравнивается в if.
+ echo LOGIC 1
LOGIC 1
Вместо x можно написать хоть что, будет работать. Но в бест практиках рекомендуют использовать именно x ну или y.
Есть и другие способы узнать задана ли переменная, но они более гиковские и совсем не человечные, поэтому опущу этот момент чтобы тебя не шокировать.
set -x = включить режим дебага
set +x = выключить режим дебага
Добавить пока больше нечего, изучай. Завтра снова увидимся, очередной CRAZYDAY. Ну и доброй ночи тебе!
tags: #bash #linux
—