Проверьте, является ли условие ложным
Кажется, это простой вопрос, интересно, почему googling ничего не помог - ни в StackOverflow, ни в учебниках. Мне просто нужно проверить с помощью bash, что условие ложно.
Из того, что я нашел, я попробовал
if ! [ 0==2 ]; then echo Hello; fi
и
if [ ! 0==2 ]; then echo Hello; fi
ни один из них не печатает Hello.
Я нашел только два похожих вопроса, но окончательный ответ в обоих случаях был измененным кодом, чтобы не использовать условие "ложь".
Ответы
Ответ 1
Вы имеете в виду:
if ! [ 0 == 2 ]; then
echo Hello;
fi
Вам не хватало пространства вокруг оператора равенства.
Это может быть время, чтобы прочитать http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html - особенно разделы о том, если then else и операторы. Обычно я открываю это, когда пишу скрипты.
Ответ 2
Для математических оценок используйте (( ))
в bash. Для использования текста [[ ]]
.
if (( $i == 0 )); then
echo "i is 0"
else
echo "i is unequal 0"
Подробнее о операторах сравнения в bash.
И больше о двойных скобках
Ответ 3
Если вы используете команду test
([..]
), вы можете использовать опцию сравнения для integer: -eq
, equal и -ne
, не равно.
if [ 0 -eq 2 ]; then echo true ; else echo false ; fi # false
if [ 0 -eq 0 ]; then echo true ; else echo false ; fi # true
if [ 0 -ne 2 ]; then echo true ; else echo false ; fi # true
if [ 0 -ne 0 ]; then echo true ; else echo false ; fi # false
В bash оператор [...]
является эквивалентом test
, команды, которая проверяет типы файлов и сравнивает значения; test - это внутренняя команда: если вы спросите свою оболочку с помощью type [
, она ответит [ is a built in shell command
. Вы можете найти двоичный файл тоже обычно в /usr/bin/[
.
СИНТАКСИС test EXPRESSION
, как вы можете читать из man test
или из info coreutils test invocation
.
Упущенное EXPRESSION по умолчанию имеет значение false. В противном случае EXPRESSION является истинным или ложным и устанавливает статус выхода.
Это отрывок от человека, который помогает понять немного лучше
-
(ЭКСПРЕССИЯ) ЭКСПРЕССИЯ истинна. Поэтому легко принять во внимание ошибку как операцию 0==1
. (Операция 0 == 1
с пробелами, 0==1
является выражением).
-
! EXPRESSION EXPRESSION является ложным.
- ...
- INTEGER1 -eq INTEGER2 INTEGER1 равен INTEGER2
- INTEGER1 -ne INTEGER2 INTEGER1 не равен INTEGER2
Из info coreutils test invocation
вы можете прочитать о состоянии выхода теста.
Статус выхода:
0 if the expression is true,
1 if the expression is false,
2 if an error occurred.
Ответ 4
В дополнение к математическим оценкам bash вы можете использовать логические выражения вместо if
:
[[email protected]:~] $ (( 0 == 0 )) && echo True || echo False
True
[[email protected]:~] $ (( 0 != 0 )) && echo True || echo False
False