В bash, [[
синтаксически команду , которая заканчивается соответствующими ]]
. Он не является частью синтаксиса if
команды, синтаксис которого начинается:
if commands ; then
Если вы хотите проверить, удалось ли команда или нет, вы просто сделать:
if grep -q pattern file; then
# grep found pattern in file
else
# grep did not find pattern in file
fi
В пределах [[
команда, bash ожидает найти условное выражение, не другая команда. Вот почему grep -x ...
является синтаксической ошибкой. -x
- унарный оператор в условном выражении, который является истинным, если его аргумент является именем исполняемого файла, но в этом выражении он используется, как если бы он был двоичным оператором.
Если вы хотите протестировать более одного образца с помощью grep
, вы можете использовать опцию -e
, чтобы указать каждый вариант; Grep удастся (или выбрать) строки, соответствующие любой из вариантов:
if grep -q -e pattern1 -e pattern2 file; then
# grep found pattern1 or pattern2 in file
else
# grep did not find either pattern in file
fi
Вы хотите, чтобы 'grep -x $ idle' собирался читать из../Event.log'? Что вы хотите прочитать с помощью команды grep -x $ idle1? –
Можете ли вы объяснить, что вы пытаетесь сделать? Я не могу догадаться; разные части кода не подходят друг другу, что имеет смысл для меня. – ruakh
Если '$ idle' и' $ dead' содержат точные строки, 'grep -x $ idle | grep -x $ dead' никогда не вернет совпадение. – tripleee