2016-07-03 11 views
1

コマンドからinput.txtファイルに以下の詳細を取得しました。私の要件は、 "Stopped | Aborted |が実行されていない"パターンのいずれかのパターンに一致することです。 その行を印刷する必要があります。すべてが「実行中」の状態であれば、「すべて実行中」という単一のメッセージを出力する必要があります。入力ファイルから各行を読み込み、希望する一致パターンを出力します。

INPUT.TXT:

SVRSVC1 SVRSVC1 NAME SVRSVC1 PID  Running 
SVRSVC2 SVRSVC2 NAME SVRSVC2 PID  Running 
SVRSVC3 SVRSVC3 NAME SVRSVC3 PID  Running 
SVRSVC4 SVRSVC4 NAME SVRSVC4 PID  Running 
SVRSVC5 SVRSVC5 NAME SVRSVC5 PID  isn't running 
SVRSVC6 SVRSVC6 NAME SVRSVC6 PID  Running 
SVRSVC7 SVRSVC7 NAME SVRSVC7 PID  Running 
SVRSVC8 SVRSVC8 NAME SVRSVC8 PID  Aborted 
SVRSVC9 SVRSVC9 NAME SVRSVC9 PID  Running 
SVRSVC10 SVRSVC10 NAME SVRSVC10 PID Running 
SVRSVC11 SVRSVC11 NAME SVRSVC11 PID Running 
SVRSVC12 SVRSVC12 NAME SVRSVC12 PID Stopped 
SVRSVC13 SVRSVC13 NAME SVRSVC13 PID Running 
SVRSVC14 SVRSVC14 NAME SVRSVC14 PID Running 

私が書かれた次のコードを持っていますが、これは正しいアプローチであるかどうかを知りたいです。 ?助けてください。

#set -x 
RUNTIME=`date +%Y%m%d_%H%M%S` 
TOTAL_RUNSTAT=$(more input.txt | wc -l) 
while read -r line; do 
if [[ $line =~ Stopped|Aborted|"isn't running" ]]; then 
echo $line; 
elif [[ $line =~ Running ]]; then 
    echo $line >> runstatuslog_$RUNTIME; 
    if [[ `more runstatuslog_$RUNTIME | wc -l` =~ $TOTAL_RUNSTAT ]]; then 
     echo "ALL SERVICES RUNNING"; 
    fi 
fi 
done < input.txt 

私の希望する出力は、 "Stopped | Aborted | is not running"という行に一致するパターンがある場合です。

SVRSVC5 SVRSVC5 NAME SVRSVC5 PID  isn't running 
SVRSVC8 SVRSVC8 NAME SVRSVC8 PID  Aborted 
SVRSVC12 SVRSVC12 NAME SVRSVC12 PID Stopped 

行にはマッチしたパターン&すべては、事前に

感謝を "ALLが実行されている" 印刷 "実行していない" している場合は、

+0

なぜ 'grep'を使わないのですか? – BeyelerStudios

答えて

0
tag=1 
while read -r line; do 
if [[ $line =~ Stopped|Aborted|"isn't running" ]]; then 
    echo $line 
tag=0 
fi 
done < input.txt 
if [ $tag -eq 1 ] 
then 
echo "ALL ARE RUNNING" 
fi 

はこれを試してみてください。それは私のために働いた。

+0

これは明示的に変数 "tag = 1"を置き、すべてが実行されているという前提で "ALL ARE RUNNING"と表示されます – user3834663

+0

このケースではcase文を使用できますか? 。 – user3834663

関連する問題