2016-12-20 4 views
1

Ich versuche, ein einfaches Bash-Skript zu erstellen. (gerade angefangen, an bash scripting zu arbeiten) das Skript ist einfach. Es gibt ein Problem mit dem rsyslog-Dienst und von Zeit zu Zeit stirbt. Ich versuche, ein Skript zu machen, um zu überprüfen, ob der Dienst tot ist, um es neu zu starten bis jetzt möchte ich überprüfen, ob meine Bedingungen in Ordnung sind, aber es scheint, dass ich einen Fehler erhalte. Kannst du mich beraten? HierIch versuche, mein Bash-Skript zu erstellen

ist das Skript:

#!/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 
------------- 

Ich erhalte die folgenden Syntaxfehler.

./rsyslogcheck.sh: Linie 17: Syntaxfehler in der Nähe von unerwartetem Token done' ./rsyslogcheck.sh: line 17: done‘

Vielen Dank im Voraus !!

+5

Führen Sie dies durch https://www.shellcheck.net - das erste 'if' fehlt seine' fi'. –

+0

Sie müssen nicht ein Semikolon (';') * und * einen Zeilenumbruch verwenden, um Anweisungen/Befehle zu trennen. –

+0

Sie verwechseln auch 'while' Loops mit' for' Loops. Es gibt keinen 'in'-Operator in' bash'; 'in' ist nur ein Schlüsselwort, um" foreach "zu" buchstabieren ". – chepner

Antwort

1

Es gibt mehrere Probleme hier:

  • Ungültige while Schleife Syntax
  • Unnötige Schleife: es scheint, dass Sie nicht brauchen, um eine Schleife an allen
  • Fehlende fi eines if schließen, die
  • eröffnet

ich nehme Sie nach etwas wie folgt aussehen:

#!/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 
Verwandte Themen