marabunta
Goto Top

Bash sqlplus oder Bash Fehler?

Hallo,

da ich sehr eingeschränkt in Bash bin, brauche ich hier etwas Hilfe.
Was stimmt mit dem EOF nicht?

 
                                          sqlcheck() {
                                           sqlplus –s /nolog << EOF ######Das ist Zeile 58 und angeblich der Fehler

                                             whenever sqlerror exit 3
                                              connect $USER/$PASSWRD
                                               insert into table sampletable values \(‘abc’,123\);
                                                delete from table sampletable;
                                                 commit;
                                                  exit 0;
                                                  EOF
                                                    return $?
                                                     }

                                                             #Check if sqlcheck is successful or retry $SQLRETRY amount of times. exit with error 3 if not successful
                                                              while [ i -lt $SQLRETRY ]
                                                               do
                                                                i=$[$i+1]
                                                                 sqlcheck()
                                                                 sleep 60
                                                                   done
                                                                    exit 3
                                                                    EOF #Zeile 84
#Zeile 85 gibt es nicht

"next.sh" 84 lines, 2671 characters written  
root@pc$ sudo /bin/bash ./next.sh
./next.sh: line 84: warning: here-document at line 58 delimited by end-of-file (wanted `EOF')  
./next.sh: line 85: syntax error: unexpected end of file

Danke für jeden Tipp!

Content-Key: 333031

Url: https://administrator.de/contentid/333031

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: 132692
132692 23.03.2017 aktualisiert um 16:24:39 Uhr
Goto Top
Was stimmt mit dem EOF nicht?
Es steht nicht am Zeilenanfang. Es muss ganz am Anfang der Zeile stehen und es darf auch kein Blank dahinter folgen.
Bei dir sind da ja jede Menge Spaces/Tabs davor.

Gruß
Mitglied: Marabunta
Marabunta 24.03.2017 um 11:27:23 Uhr
Goto Top
Danke.
Hab jetzt alle leerzeichen etc. entfernt und er haut mich wieder raus weil echo nicht passt.
Vermutlich ist der Fehler davor, aber ich sehe nicht woran es liegen könnte

#Check if connection to database is working, also insert sample data and delete sample.
sqlcheck() {
echo "in sqlcheck"  
sqlplus –s /nolog <<EOF
whenever sqlerror exit 3
connect $USER/$PASSWRD
insert into table sampletable values \(‘abc’,123\);
delete from table sampletable;
commit;
exit 0;
echo "bin hier"  
EOF
echo "jetzt da"  
return $?;
echo "und jetzt hier"  
exit 0;
}


#Check if CheckFolder is successful or exit with error 1
CheckFolder || exit 1
#Check if psschek is successful or exit with error 2
pscheck || exit 2
echo "return of functioncall $?"  
#Check if sqlcheck is successful or retry $SQLRETRY amount of times. exit with error 3 if not successful
while [ i -lt $SQLRETRY ]
do
i=$[$i+1]
sqlcheck()
echo "jetzt raus $?"; #Zeile 85 Fehler ist hier  
sleep 60;
done
exit 3
EOF

./next.sh: line 85: syntax error near unexpected token `echo'  
./next.sh: line 85: `echo "jetzt raus $?";'  
Mitglied: 132692
132692 24.03.2017 aktualisiert um 11:32:46 Uhr
Goto Top
Wieso hast du in der letzten Zeile ein EOF stehen (Zeile 34) ???

Und bei der Variante wird alles zwischen <<EOF ....EOF expandiert, das sollte dir bewusst sein! Willst du das nicht musst du den Delimiter in "Anführungszeichen" setzen.
Mitglied: Marabunta
Marabunta 24.03.2017 um 11:45:28 Uhr
Goto Top
es wurde ein fehlendes EOF angemeckert.
ich weiß zwar, dass es nie dahin kommt aber wenns ihn glücklich macht bekommt er sein eof.
was genau bedeutet die expandierung für mich?
Ich bin neu in Bash.
Mitglied: 132692
132692 24.03.2017 um 11:47:06 Uhr
Goto Top
https://ss64.com/bash/syntax-here.html
To disable parameter substitution put quotes around the limit string: <<"End-of-message"
Mitglied: Marabunta
Marabunta 24.03.2017 um 11:56:24 Uhr
Goto Top
gleiches Ergebnis

sqlcheck() {
echo "in sqlcheck"  
sqlplus –s /nolog <<"EOF" # Hier sind die Anführungszeichen  
whenever sqlerror exit 3
connect $USER/$PASSWRD
insert into table sampletable values \(‘abc’,123\);
delete from table sampletable;
commit;
exit 0;
echo "bin hier"  
EOF
echo "jetzt da"  
return $?;
echo "und jetzt hier"  
exit 0;
}


#Check if CheckFolder is successful or exit with error 1
CheckFolder || exit 1
#Check if psschek is successful or exit with error 2
pscheck || exit 2
echo "return of functioncall $?"  
#Check if sqlcheck is successful or retry $SQLRETRY amount of times. exit with error 3 if not successful
while [ i -lt $SQLRETRY ]
do
i=$[$i+1]
sqlcheck()
echo "jetzt raus $?";  
sleep 60;
done
exit 3
EOF

./next.sh: line 85: syntax error near unexpected token `echo'  
./next.sh: line 85: `echo "jetzt raus $?";'  
Mitglied: 132692
132692 24.03.2017 aktualisiert um 12:09:13 Uhr
Goto Top
Dann wird dein SQLplus command das so nicht fressen, speichere es vorher in einer Variablen und übergebe es ihm. Beim sqlplus command kann ich dir leider nicht weiterhelfen kenne ich nicht.
ZEILE 10 echo "bin hier"
das ist ja auch Quatsch das dort hinzuschreiben...