2016-02-04 2 views
0

Мне нужно запустить 2 команды сборки. Один из них ниже. Условие заключается в том, что если он обнаруживает строку «Ошибка» при первой сборке, она должна выйти из цикла и больше не должна запускаться, но если ей нет, она должна запустить другую команду сборки, которая является ./v post- строить. У меня есть следующее, но я думаю, что чего-то не хватает.Выход из скрипта, если строка найдена

#!/bin/bash 
cd /etc/logs 
./v pre-build > test_file 
File=test_file 
value=$(grep -c Error $File) 
if [ $value -eq 1 ] 
then 
echo "It's available" 
else 
./v post-build > test_file1 
fi 
+0

Здесь нет петли. Вы можете использовать 'grep -q' и проверить статус выхода – anubhava

+0

Когда я тестирую grep -q, я получаю сообщение об ошибке. – James

+0

@james, имейте в виду, что условие 'if' на самом деле является * командой * -' ['является командой. От ветвей оболочки зависит от статуса выхода этой команды. Вы хотите: 'если grep -q Error" $ File "; затем ... ' –

ответ

0

Вы проверяете для возникновения ошибки слова.

Я предлагаю вам проверить, если есть один или более вместо:

if [ $value -eq 1 ] 
    # change to: 
    if [ $value -gt 1 ] 
+0

Спасибо, но не помогло. – James

0

Если какое-либо вхождение ошибки может быть найден, вы можете проверить молча Grep, как это:

!/bin/bash 

cd /etc/logs 

./v pre-build > test_file 
grep -q "Error" test_file 

if [ "$?" -ne "0" ]; then 
    echo "It's available" 
else 
    ./v post-build > test_file1 
fi 
2

, если вы нужен выходной файл, сохраненный для последующей обработки, нет необходимости генерировать промежуточные файлы. И ваш сценарий может быть столь же просто, как:

#!/bin/bash 
cd /etc/logs 
./v pre-build | grep -q Error && exit 1 
./v post-build 

Если вы хотите сохранить промежуточные файлы, просто используйте tee:

#!/bin/bash 
cd /etc/logs 
./v pre-build | tee test_file | grep -q Error && exit 1 
./v post-build > test_file1 

Это удаляет выход «Он доступен», вместо того, чтобы возвращать ошибки, если pre-build генерирует ошибку. Если у вас есть контроль над v, вы должны также возвращать ошибку, а не генерировать строку в своем выходе, так как вы могли бы сделать сценарий просто:

./v pre-build && ./v post-build 

(В этой линии, && короткие схемы, так что пост-сборка выполняется только в том случае, если предварительная сборка завершается успешно.)

+0

Хорошо, я решил ... Спасибо. – James

+0

Ваш первый без тройника хорош, за исключением того, что мне пришлось положить -c not -q. У меня всегда была ошибка с -q, я не знаю, почему. – James