2016-12-20 23 views
1

私は単純なbashスクリプトを作成しようとしています。 (ちょうどbashスクリプトに取り組み始めました) スクリプトは簡単です。 rsyslogサービスに問題があり、時には死ぬことがあります。 サービスを再起動するためにサービスが終了していないかどうかを確認するスクリプトを作成しようとしています。 まで今の状態は正常かどうかをチェックしたいが、エラーが出ているようだ。私にアドバイスできますか?ここで私のbashスクリプトを作成しようとしています

はスクリプトです:

#!/bin/bash 
a="dead" 
b="running" 
while i in $(/etc/init.d/rsyslog status | grep -o 'running\|dead'); 
do 
if 
[ "$a" == "$i" ]; 
then 
echo "service rsyslog is dead " 
if 
[ "$b" == "$i" ]; 
then 
echo "service rsyslog is running" 
else 
echo "nothing to do"; 
fi; 
done 
------------- 

私は、次の構文エラーを取得しています。

./rsyslogcheck.sh:行17:予期しないトークンdone' ./rsyslogcheck.sh: line 17:の近くに構文エラーが」

を行って事前にありがとうございます!

+5

これをhttps://www.shellcheck.netから実行します。最初の 'if'には' fi'がありません。 –

+0

ステートメント/コマンドを区切るために、セミコロン( ';')*と*改行の両方を使う必要はありません。 –

+0

また、 'while'ループと' for'ループを混同しています。 'bash'には' in'演算子はありません。 'in'は' foreach'のスペルに使われる単なるキーワードです。 – chepner

答えて

1

いくつかの問題がここにあります

  • 無効whileループ構文
  • 不要なループ:あなたが
  • をオープンした iffiを閉じるミッシング全て
  • でループを必要としないようです

このようなものをお探しの場合は、

#!/bin/bash 
status=$(/etc/init.d/rsyslog status | grep -o 'running\|dead') 
case "$status" in 
dead) echo "service rsyslog is dead";; 
running) echo "service rsyslog is running";; 
*) echo "nothing to do";; 
esac 
関連する問題