ubuntuusers.de

EOF Fehler in Bash/sqlplus

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.10 (Yakkety Yak)
Antworten |

Marabunta

Anmeldungsdatum:
22. März 2017

Beiträge: Zähle...

Hallo,

ich bin weit gekommen, nur hier stört den noch irgendwas. Nur sehe ich keinen Fehler...

Sieht da jemand woran es liegt?

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

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Ja.

Schau Dir die Zeile mit dem EOF an: da hast Du ein Leerzeichen davor stehen. Das funktioniert nicht, denn: (lt. Bash Manual)

This type of redirection instructs the shell to read input from the current source until a line containing only word (with no trailing blanks) is seen.

Deshalb findet er kein Ende-Zeichen. (Du könntest auch die "<<-" - Umleitung nehmen, dann würde er die Leerzeichen davor tolerieren.)

LG,

track

Marabunta

(Themenstarter)

Anmeldungsdatum:
22. März 2017

Beiträge: 4

Leerzeichen entfernt und versucht ein paar mehr infos in simpler weise zu bekommen...

./next.sh: line 85: syntax error near unexpected token `echo'
./next.sh: line 85: `echo "jetzt raus $?";'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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 $?";
sleep 60;
done
exit 3
EOF

Bearbeitet von rklm:

Wenigstens das Syntaxhighlighting eingeschaltet

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17620

Wohnort: Berlin

1
sqlcheck()

Ich denk die runden Klammern sind in der Bash falsch. Mach die mal probehalber weg.

Also in Zeile 84. Da Fehlermeldungen von Programmieren generiert werden leiden die auch oft unter dem off-by-one-error. ☺

Antworten |