Возможно, ваша команда выводит на стандартный вывод вместо стандартного вывода. Чтобы перенаправить stderr на stdout:
sudo /usr/local/nginx/sbin/nginx -t 2>&1 | sed -e '$!d'
Если вам нужна только последняя строка вывода, вы также можете использовать tail -n 1
вместо sed
.
Ну, я исправил опечатку, которая определенно нарушала программу, и исправил синтаксис оператора, также определенно нарушающий ее. Однако (и это может показаться смешным), как только я исправил эти проблемы, я выполнил valid=${#validCheck}
операцию вручную, чтобы проверить длину строки на всякий случай, и обнаружил, что длина каталога на самом деле 45 символов, а не 46. Сейчас я чувствую себя дураком, но я рад, что проблема решена и я могу перейти к более важным функциям. Спасибо вам обоим за исправления моих опечаток и спасибо Ричарду за предложение инструментов chroot jail.
Чтобы кратко ответить на вопрос, поставленный в заголовке:
if [[ "$foo" -lt "$bar" ]]; then
echo "$foo is less than $bar"
fi
Тесты для целочисленных сравнений:
n1 -eq n2 True if the integers n1 and n2 are algebraically equal.
n1 -ne n2 True if the integers n1 and n2 are not algebraically equal.
n1 -gt n2 True if the integer n1 is algebraically greater than the
integer n2.
n1 -ge n2 True if the integer n1 is algebraically greater than or
equal to the integer n2.
n1 -lt n2 True if the integer n1 is algebraically less than the inte-
ger n2.
n1 -le n2 True if the integer n1 is algebraically less than or equal
to the integer n2.
Использование e. грамм. <
или >
выполняет сравнение порядка ASCII, поэтому [[0100 <100]]
будет истинным.