Além de outras respostas, que lhe ensinaram como fazer o que você queria, tento explicar o que estava errado (o que você queria.
No Bash, if
deve ser seguido com um comando. Se o código de saída deste comando for igual a 0, a then
parte será executada; caso contrário, a else
parte, se houver, será executada.
Você pode fazer isso com qualquer comando, conforme explicado em outras respostas: if /bin/true; then ...; fi
[[
é um comando bash interno dedicado a alguns testes, como existência de arquivo, comparações de variáveis. Da mesma forma, [
é um comando externo (normalmente localizado em /usr/bin/[
) que executa aproximadamente os mesmos testes, mas precisa ]
como argumento final, e é por isso que ]
deve ser preenchido com um espaço à esquerda, o que não é o caso ]]
.
Aqui você não precisa [[
nem [
.
Outra coisa é a maneira como você cita as coisas. No bash, há apenas um caso em que pares de aspas se aninham, é isso "$(command "argument")"
. Mas 'grep 'SomeString' $File'
você tem apenas uma palavra, porque 'grep '
é uma unidade citada, que é concatenada com SomeString
e depois concatenada com ' $File'
. A variável $File
nem é substituída por seu valor por causa do uso de aspas simples. A maneira correta de fazer isso é grep 'SomeString' "$File"
.