Независимый от платформы способ, как правило, заключается в добавлении соответствующих LoadModule
директив в вашу конфигурацию Apache. Что делает a2enmod
, так это связывает файлы с такими директивами(.load
файлы, плюс дополнительные .conf
файлы, если необходимо )от /etc/apache2/mods-available
до/etc/apache2/mods-enabled
&&
применяет вторую часть только в том случае, если первая часть верна. Вот что у вас есть
nc
завершается успешно, поэтому запустите if it suceeded
(, что и было сделано)echo 1
nc
не проходит, так что не проходите дальше&&
Я думаю, ты хочешь вот этого
if nc -z 10.102.10.22 10003 > /dev/null; then echo 1; else echo 0; fi
Кажется, вы запускаете инструкцию if
только в том случае, если nc
завершается успешно:
nc... && if...
Это объясняет, почему 0
никогда не выводится. Поскольку оператор if
не выполняется, когда nc
терпит неудачу, ветвь else
оператора if
всегда недостижима.
Вместо этого используйте nc
напрямую сif
:
if nc -z 10.102.10.22 10003 >/dev/null; then
echo 1
else
echo 0
fi
Вероятно, вы могли бы также написать этот конкретный оператор, используя короткую -схемную логику:
nc -z 10.102.10.22 10003 >/dev/null && echo 1 || echo 0
... но технически это не то же самое, что оператор if
. Эта последняя команда выполнит echo 0
, если либо из nc
, либо echo 1
не удастся.
Чтобы заставить команду nc
выйти через 10 секунд, используйте утилиту GNUtimeout
:
if timeout 10 nc -z 10.102.10.22 10003 >/dev/null; then
echo 1
else
echo 0
fi
Специальная переменная $?
используется очень редко . Вам это нужно только в ситуациях, когда вам нужно использовать статус выхода какой-либо команды после выполнения одной или нескольких дополнительных команд. Например, при возврате статуса выхода из функции оболочки в некоторых случаях:
myfunction () {
grep -q 'pattern' file
err=$?
if [ "$err" -ne 0 ]; then
echo failed >&2
fi
return "$err"
}
Здесь как проверка [... ]
, так и сброс echo
$?
.
В дополнение к другим превосходным ответам, желаемый результат также является арифметическим отрицанием статуса выхода:
nc -z 10.102.10.22 10003 > /dev/null
echo $(( ! $? ))