Brak skryptu Bash „]” [zamknięty]

82

Otrzymuję błąd ./test.sh: wiersz 13: [: brak `] 'w pliku test.sh Próbowałem użyć nawiasów i innych opcji, takich jak -a lub sprawdzając rozmiar pliku p1, ale błąd jest zawsze tam, a instrukcja else jest zawsze wykonywana niezależnie od danych wejściowych. Próbowałem nawet usunąć; w linii 13, ale to nie pomogło.

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

Nie mam doświadczenia w pisaniu skryptów basha, więc jeśli jest jakiś głupi błąd, proszę mi wybaczyć.

szybki-
źródło

Odpowiedzi:

214

Zmiana

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

w

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

zwróć uwagę na spację.

Fredrik Pihl
źródło
to wszystko, dziękuję!
Nickolay Kondratenko
40

Otrzymałem ten błąd podczas próby użycia &&operatora w pojedynczych nawiasach, np [ ... && ... ]. Musiałem się przełączyć [[ ... && ... ]].

Carl G
źródło
Używałem również && z if i to rozwiązało mój problem.
Praveen Patel
Używałem operatora == i miałem ten sam problem, przejście na podwójny nawias kwadratowy pomogło, dzięki!
Vishnu Nair
9

Brakuje spacji po "p1":

if [ -s "p1" ];
Elmar Peise
źródło
6

dodaj spację przed nawiasem zamykającym

Sam Ruby
źródło
0

Jeśli stworzyłeś swój skrypt w systemie Windows i chcesz go uruchomić na komputerze z systemem Linux i jesteś pewien, że nie ma błędu w Twoim kodzie, zainstaluj dos2unix na komputerze z systemem Linux i uruchom dos2unix yourscript.sh. Następnie uruchom skrypt.

Vladimir Marton
źródło