P
peshay
Grünschnabel
Hallo, ich habe bei einem Skript ein Problem mit einer If-Schleife in einer While-Schleife, das Skript soll auf mehreren Servern SQL-Befehle ablassen.
Hier der Part, der mir Schwierigkeiten bereitet.
Die Funktion CheckHost(), prüft nur ob der hostname richtig ist, ein ping geht und ein kurzer ssh funktionert. Sie gibt mir auch den return code 0 zurück was ich zum Beispiel mit einem "&& echo $?" dahinter geprüft habe.
Die If-Schleife läuft dann einmal durch, anschließend wird die While-Schleife beendet, obwohl noch viele weitere Einträge in der dbliste sind.
Wenn ich die If-Schleife raus nehme, läuft das Skript komplett über alle Einträge in der dbliste.
Mir ist irgendwie nicht klar, was mit dieser If-Schleife nicht stimmt.
Ich habe auch schon ein set -x reingesetzt, das Skript beendet sich mit If-Schleife dann so:
Als würde die liste auf einmal nichts mehr liefern...
Achja, ein Tipp wie ich die Variablen einfacher befüllen kann als so, wäre auch echt nett:
Hier der Part, der mir Schwierigkeiten bereitet.
Code:
while read liste; do
# set variables from server database
HOST=$(echo $liste | awk '{ print $1 }')
PORT=$(echo $liste | awk '{ print $2 }')
OUSER=$(echo $liste | awk '{ print $3 }')
DBUSER=$(echo $liste | awk '{ print $5 }')
DBPASS=$(echo $liste | awk '{ print $6 }')
if CheckHost $HOST $PORT $OUSER; then
# write log info
echo --------- Executing command at $HOST --------- | tee -a logfile
# create command
echo -e "connect $DBUSER/$DBPASS;\n$(cat $commandfile)\nexit;" >$tmpfile
$ssh -p $PORT $OUSER@$HOST <$tmpfile "cat >command
source .profile 2>/dev/null
cat command | sqlplus -S /nolog
rm command
" 2>&1 | tee -a logfile
else
Hint connection to $HOST could not be established. >>logfile
fi
done < ~/remote-cmd-script/dbliste
Die If-Schleife läuft dann einmal durch, anschließend wird die While-Schleife beendet, obwohl noch viele weitere Einträge in der dbliste sind.
Wenn ich die If-Schleife raus nehme, läuft das Skript komplett über alle Einträge in der dbliste.
Mir ist irgendwie nicht klar, was mit dieser If-Schleife nicht stimmt.
Ich habe auch schon ein set -x reingesetzt, das Skript beendet sich mit If-Schleife dann so:
Code:
+ echo -e 'connect corpus/corpus;\nselect login from party where login like '\''sumuser'\'';\nexit;'
+ ssh -o BatchMode=yes -p 22 user@somehost 'cat >command
+ tee -a logfile
source .profile 2>/dev/null
cat command | sqlplus -S /nolog
rm command
'
LOGIN
----------------------------------------------------------------
sumuser
logout
+ read liste
+ OnExit
+ set +x
Achja, ein Tipp wie ich die Variablen einfacher befüllen kann als so, wäre auch echt nett:
Code:
HOST=$(echo $liste | awk '{ print $1 }')