Además de otras respuestas, que te dijeron cómo hacer lo que quería, que tratan 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, se ejecuta la parte then
, de lo contrario se ejecuta la parte else
, si hay alguna.
se puede hacer eso con cualquier comando como se ha explicado en otras respuestas: if /bin/true; then ...; fi
[[
es un comando interno fiesta dedicada a algunas pruebas, como la existencia de archivo, las comparaciones de variables. De manera similar, [
es 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 con ]]
.
Aquí no necesita [[
ni [
.
Otra cosa es la forma en que citas cosas. En bash, solo hay un caso donde anidan pares de comillas, es "$(command "argument")"
.Pero en 'grep 'SomeString' $File'
tiene una sola palabra, porque 'grep '
es una unidad entre comillas, que se concatena con SomeString
y luego se vuelve a concatenar con ' $File'
. La variable $File
ni siquiera se reemplaza con su valor debido al uso de comillas simples. La forma correcta de hacerlo es grep 'SomeString' "$File"
.
Similar a http://stackoverflow.com/questions/4749330/how-to-test-if-string-exists-in-file-with-bash-shell – Pawel