En plus d'autres réponses, qui vous ont dit comment faire ce que vous vouliez, j'essaie d'expliquer ce qui n'allait pas (c'est ce que vous vouliez.
Dans Bash, if
doit être suivi d'une commande. Si le code de sortie de cette commande est égal à 0, alors la then
partie est exécutée, sinon la else
partie le cas échéant est exécutée.
Vous pouvez le faire avec n'importe quelle commande, comme expliqué dans d'autres réponses: if /bin/true; then ...; fi
[[
est une commande bash interne dédiée à certains tests, comme l'existence de fichiers, les comparaisons de variables. De même [
est une commande externe (elle se trouve généralement dans /usr/bin/[
) qui effectue à peu près les mêmes tests mais a besoin ]
comme argument final, c'est pourquoi ]
doit être complétée avec un espace à gauche, ce qui n'est pas le cas ]]
.
Ici, vous n'avez pas besoin non [[
plus [
.
Une autre chose est la façon dont vous citez les choses. En bash, il n'y a qu'un seul cas où des paires de guillemets s'emboîtent, c'est le cas "$(command "argument")"
. Mais 'grep 'SomeString' $File'
vous n'avez qu'un seul mot, car 'grep '
est une unité citée, qui est concaténée avec SomeString
puis concaténée avec ' $File'
. La variable $File
n'est même pas remplacée par sa valeur en raison de l'utilisation de guillemets simples. La bonne façon de le faire est grep 'SomeString' "$File"
.