Falta el script de bash ']' [cerrado]

81

Recibo un error ./test.sh: línea 13: [: missing `] 'en el archivo test.sh Intenté usar corchetes y otras opciones como -a o verificando el tamaño del archivo p1 pero el error es siempre está ahí y la instrucción else siempre se ejecuta independientemente de la entrada dada. Incluso lo intenté eliminando el; en la línea 13 pero no ayudó.

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

Soy nuevo en bash scripting, así que si hay algún error tonto, discúlpeme.

rápido-
fuente

Respuestas:

210

Cambio

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

dentro

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

tenga en cuenta el espacio.

Fredrik Pihl
fuente
eso es todo, gracias!
Nickolay Kondratenko
38

Recibí este error al intentar usar el &&operador dentro de corchetes simples como [ ... && ... ]. Tuve que cambiarme a [[ ... && ... ]].

Carl G
fuente
También estaba usando && con if y resolvió mi problema.
Praveen Patel
Estaba usando el operador == y tuve el mismo problema, cambiar al corchete doble ayudó, ¡gracias!
Vishnu Nair
9

Te falta un espacio después de "p1":

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

agregue un espacio antes del corchete de cierre

Sam Ruby
fuente
0

Si creó su script en Windows y desea ejecutarlo en una máquina Linux, y está seguro de que no hay ningún error en su código, instale dos2unix en la máquina Linux y ejecútelo dos2unix yourscript.sh. Luego, ejecute el script.

Vladimir Marton
fuente