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








Комментарии