Además de otras respuestas, que le indicaron cómo hacer lo que quería, trato de explicar lo que estaba mal (que es lo que quería).
En Bash, if
debe seguirse con un comando. Si el código de salida de este comando es igual a 0, entonces la then
parte se ejecuta, de lo contrario, se ejecuta la else
parte.
Puede hacerlo con cualquier comando como se explica en otras respuestas: if /bin/true; then ...; fi
[[
es un comando bash interno dedicado a algunas pruebas, como la existencia de archivos, comparaciones variables. Del mismo modo, se [
trata de un comando externo (se encuentra típicamente en /usr/bin/[
) que realiza aproximadamente las mismas pruebas pero necesita ]
como argumento final, por lo que ]
debe rellenarse con un espacio a la izquierda, que no es el caso ]]
.
Aquí no necesitas [[
ni [
.
Otra cosa es la forma de citar las cosas. En bash, solo hay un caso en el que anidan pares de comillas, es "$(command "argument")"
. Pero en 'grep 'SomeString' $File'
usted solo tiene una palabra, porque 'grep '
es una unidad entre comillas, que se concatena SomeString
y luego se concatena nuevamente con ' $File'
. La variable $File
ni siquiera se reemplaza por su valor debido al uso de comillas simples. La forma correcta de hacerlo es grep 'SomeString' "$File"
.