172 похожих чатов

Специалисты баша на страже? Подскажите пожалуйста, есть скрит такого типа

if [ -n "${var2}" ] && ( [ "${var2}" == create ] || [ "${var2}" == deploy ] ); then
echo something1
elif [ -n "${var4}" ] && [ "${var4}" == test ]; then
echo something2

else
echo something_else
fi

Идея в том что var2 и var4 могут существовать а могут не существовать. Если есть вар2 и оно соотвествует одному из значений, то делать первый блок иф, если есть вар4 то делать следующий блок иф. Если не того не того нема, то выводит сообщение
Когда запускаю то постоянно получаю ошибку var2: unbound variable
Но её и не должно быть и скрипт должен идти во второй блок. Для этого я поставил проверку переменной -n
Где я натупил?

7 ответов

22 просмотра

Проверка флага лучше делать так some_flag=true if $some_flag; then ... fi

Andrew- Автор вопроса
Kan
Проверка флага лучше делать так some_flag=true if...

Там просто переменная, а не какое-то конкретное название

Kan
Проверка флага лучше делать так some_flag=true if...

Потому что true это shell команда которая возвращает нулевой код выхода, false ненулевой(1) соответственно

Andrew- Автор вопроса
Kan
Потому что true это shell команда которая возвраща...

Ааа, если говорить про true то это указывается. Типа true включить, а false выключить. То есть это вписывается при запуске типа дженкинса

-n проверяет ЗНАЧЕНИЕ переменное, а не ее СУЩЕСТВОВАНИЕ. Если у тебя стоит set -u, то тебе нужно изначально определить переменную

Andrew- Автор вопроса
Andrew
Да, в начале скрипта есть set -eou pipefail

Либо можно вот так проверять на существование переменной if [[ -v a ]]; thebn fi БЕЗ ЗНАКА ДОЛЛАР

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта