Я новичок в bash и застрял при попытке отменить следующую команду:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
Это если условие возвращает истину, если я подключен к Интернету. Я хочу, чтобы это произошло наоборот, но положить что- !
то не получается.
linux
bash
if-statement
negate
Sudh33ra
источник
источник
if ! [[ ...
работаетОтветы:
Ты можешь выбрать:
!
инвертирует возврат следующего выражения, соответственно.источник
test
командой:if test $? -ne 0; then
if
ожидает оператор, который будет либо 0, либо 1, поэтому вы можете использовать саму команду и инвертировать ее:if ! wget ...; then ...; fi
Лучше
источник
!
следующей и следующей командами, иначе вы будете выполнять расширение истории. unix.stackexchange.com/questions/3747/…Если вам лень, вот краткий метод обработки условий с использованием
||
(или) и&&
(и) после операции:источник
&&
после echo на a;
. Причина этого заключается в том, что если вывод перенаправляется в файл на полном диске,echo
он возвращает ошибку иexit
никогда не сработает. Это, вероятно, не то поведение, которое вы хотите.set -e
и в случае неудачиecho
выйдет из сценария в любом случаеПоскольку вы сравниваете числа, вы можете использовать арифметическое выражение , которое упрощает обработку параметров и сравнение:
Обратите внимание, как вместо
-ne
, вы можете просто использовать!=
. В арифметическом контексте нам даже не нужно прибегать$
к параметрам, т. Е.отлично работает Это не относится к
$?
специальному параметру, хотя.Кроме того, поскольку
(( ... ))
ненулевые значения оцениваются как истина, т. Е. Имеет статус возврата 0 для ненулевых значений и статус возврата 1 в противном случае, мы могли бы сократить доно это может сбить с толку больше людей, чем стоит сэкономленное нажатие клавиш.
(( ... ))
Конструкция доступна в Bash, но не требует спецификации POSIX оболочки (упоминается в качестве возможного расширения, хотя).Все это , как говорится, это лучше избегать
$?
вообще , на мой взгляд, как и в ответ Коула и ответ Стивена .источник
(( ... ))
? Справочник программистов POSIX - Составные команды:)
Вы можете использовать неравное сравнение
-ne
вместо-eq
:источник