[
и test
синонимы (кроме [
требует ]
), таким образом, Вы не хотите использовать [ test
:
[ -x /bin/cat ] && echo 'cat is executable'
test -x /bin/cat && echo 'cat is executable'
test
возвращает нулевой статус выхода, если условие является верным, в других отношениях ненулевым. Это может на самом деле быть заменено любой программой для проверки ее статуса выхода, где 0 указывает, что успех и ненулевой указывает на отказ:
# echoes "command succeeded" because echo rarely fails
if /bin/echo hi; then echo 'command succeeded'; else echo 'command failed'; fi
# echoes "command failed" because rmdir requires an argument
if /bin/rmdir; then echo 'command succeeded'; else echo 'command failed'; fi
Однако все вышеупомянутые примеры только тестируют против статуса выхода программы и игнорируют вывод программы.
Для find
, необходимо будет протестировать, если вывод был сгенерирован. -n
тесты для непустой строки:
if [[ -n $(find /var/log/crashes -name "app-*.log" -mmin -5) ]]
then
service myapp restart
fi
Полный список тестовых аргументов доступен путем вызова help test
в bash
командная строка.
Если Вы используете bash
(и нет sh
), можно использовать [[ condition ]]
, который ведет себя больше очевидно, когда существуют пробелы или другие особые случаи в Вашем условии. Иначе это обычно - то же как использование [ condition ]
. Я использовал [[ condition ]]
в этом примере, как я делаю, когда это возможно.
Я также изменился `command`
кому: $(command)
, который также обычно ведет себя точно так же, но более любезен с вложенными командами.
xzcat
обычно часть xz
пакет. Установите тот пакет с помощью инструмента управления пакета дистрибутива Linux (Вы не упомянули, какой дистрибутив Linux Вы используете - как Debian, Redhat и т.д.).