Bash-Scripting fehlt ']' [geschlossen]

81

Ich erhalte eine Fehlermeldung ./test.sh: Zeile 13: [: fehlt `] 'in der Datei test.sh Ich habe versucht, Klammern und andere Optionen wie -a zu verwenden oder die Größe der Datei p1 zu überprüfen, aber der Fehler ist immer da und die else-Anweisung wird immer ausgeführt, unabhängig von der angegebenen Eingabe. Ich habe sogar versucht, die; in Zeile 13 aber es hat nicht geholfen.

test.sh

#!/bin/bash
echo "Enter app name"
read y
$y &
top -b -n 1 > topLog.log
#-w checks for the whole word not and sub string from that word
grep -w "$y" topLog.log > p1
#-s option checks if the file p1 is present or not
if [ -s "p1"];  #line 13
then 
    echo "Successful "
else
    echo "Unsuccessful"
fi
rm p1

Ich bin neu im Bash-Scripting. Wenn es also einen dummen Fehler gibt, entschuldigen Sie mich bitte.

schnell-
quelle

Antworten:

210

Veränderung

if [ -s "p1"];  #line 13

in

if [ -s "p1" ];  #line 13

Beachten Sie den Raum.

Fredrik Pihl
quelle
das war's, danke!
Nickolay Kondratenko
38

Ich habe diesen Fehler beim Versuch, den &&Operator in einzelnen Klammern wie zu verwenden [ ... && ... ]. Ich musste zu wechseln [[ ... && ... ]].

Carl G.
quelle
Ich habe auch && mit if verwendet und es hat mein Problem gelöst.
Praveen Patel
Ich habe den Operator == verwendet und hatte das gleiche Problem. Der Wechsel zur doppelten eckigen Klammer hat geholfen, danke!
Vishnu Nair
9

Sie vermissen ein Leerzeichen nach "p1":

if [ -s "p1" ];
Elmar Peise
quelle
6

Fügen Sie vor der schließenden Klammer ein Leerzeichen ein

Sam Ruby
quelle
0

Wenn Sie Ihr Skript unter Windows erstellt haben und es auf einem Linux-Computer ausführen möchten und sicher sind, dass Ihr Code keinen Fehler enthält, installieren Sie dos2unix auf einem Linux-Computer und führen Sie es aus dos2unix yourscript.sh. Führen Sie dann das Skript aus.

Vladimir Marton
quelle