2010-05-29 6 views
2

Я пишу скрипт bash для запуска теста интеграции инструмента, который я пишу.Bash scripting знает результат команды

В основном я запускаю приложение с набором входов и сравниваю результаты с ожидаемыми значениями с помощью инструмента командной строки diff.

Он работает, но я хотел бы улучшить его, зная результат команды diff и печатать «УСПЕХ» или «НЕИСПРАВНОСТЬ» в зависимости от результата diff.

Как я могу это сделать?

ответ

6
if diff file1 file2; then 
    echo Success 
else 
    echo Fail 
fi 

Если оба файла равно, дифференциалы возвращает 0, который является кодом возврата для if следовать then. Если file1 и file2 отличаются, diff возвращает 1, что делает, если перейти к части конструкции else.

Возможно, вы захотите подавить выход diff путем записи diff file1 file2 >/dev/null вместо вышеуказанного.

+1

Я думаю, вы должны ясно дать понять, как именно это работает – LukeN

+0

Спасибо, это работает для меня. Я читал о $? переменная, но я не был уверен, как Diff использовал ее. Спасибо. Кто-нибудь знает, возможно ли разбить все файлы из каталога на другой? Я пробовал diff dir1/* dir2/*, но это не сработало. –

+0

diff -R dir1 dir2 – Joshua

5

Переменная $? содержит результат последней выполненной команды.

2

Кроме того, в Bash вы можете diff выходы команд непосредственно с помощью подстановки процесса:

if diff <(some_command arg1) <(some_command arg1) > /dev/null 2>&1 
then 
    echo "They're the same." 
else 
    echo "They're different." 
fi