2016-06-20 2 views
-1

У меня есть сценарий оболочки Unix, в котором я даю два условия для ошибки и не ошибка, как показано ниже:Unix КШ: Возвращение только 1 за ошибки и 0 для успеха

Script: Test.sh

#!/bin/sh 

error1=ERROR 
error2=FAIL 

CheckError1=`grep $error1 proshell.sh | wc -l` 

CheckErro2=`grep $error2 proshell.sh | wc -l` 

if [ $CheckError1 -ge 1 ] then 
    exit 1 

elif [ $CheckError2 -ge 1 ] then 
    exit 1 

else 
    exit 0 
fi 

Примечание: проблема заключается в том, что я не получаю всегда 1 для любых ошибок для выхода 1.

Как получить только 1 за любые ошибки?

+1

Пожалуйста, покажите реальный код; то, что вы показали, не является синтаксически правильным. У вас также есть опечатка: 'CheckErro2 =' vs' $ CheckError2 -ge'. Что вы получаете вместо 1? Вы получаете 0? Или '' 'жалуется на неправильное состояние? Но код не работает, поэтому ... спекуляция бесполезна. См. Также [Как отлаживать сценарий оболочки] (https://stackoverflow.com/questions/951336/), который ссылается на Bash, но то же самое работает на оболочку Korn (и оболочку Bourne). –

+0

Также вы говорите о 'ksh', но ваша строка shebang указывает'/bin/sh', что наиболее вероятно _not_ 'ksh'. – mklement0

+0

Объедините оба теста с 'grep -E '$ {error1} | $ {error2}" ' –

ответ

1

Вы проверяете количество строк соответствует статус не в выхода из Grep.

Вы хотите сделать это:

error1=ERROR 
error2=FAIL 
file-proshell.sh 

if grep -q "$error1" "$file" || grep -q "$error2" "$file"; then 
    exit 1 
else 
    exit 0 
fi 

grep -q подавляет вывод, но выходит со статусом успеха выхода, если совпадение найдено