Условное `если `с командой, которая не отвечает в противном случае

Независимый от платформы способ, как правило, заключается в добавлении соответствующих LoadModuleдиректив в вашу конфигурацию Apache. Что делает a2enmod, так это связывает файлы с такими директивами(.loadфайлы, плюс дополнительные .confфайлы, если необходимо )от /etc/apache2/mods-availableдо/etc/apache2/mods-enabled

0
17.03.2021, 14:36
3 ответа

&&применяет вторую часть только в том случае, если первая часть верна. Вот что у вас есть

  • ncзавершается успешно, поэтому запустите if it suceeded(, что и было сделано)echo 1
  • ncне проходит, так что не проходите дальше&&

Я думаю, ты хочешь вот этого

if nc -z 10.102.10.22 10003 > /dev/null; then echo 1; else echo 0; fi
4
18.03.2021, 22:24

Кажется, вы запускаете инструкцию 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$?.

6
18.03.2021, 22:24

В дополнение к другим превосходным ответам, желаемый результат также является арифметическим отрицанием статуса выхода:

nc -z 10.102.10.22 10003 > /dev/null
echo $(( ! $? ))
3
18.03.2021, 22:24

Теги

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