В дополнение к другим ответам, в которых рассказывалось, как делать то, что вы хотели, я пытаюсь объяснить, что было не так (что вы и хотели).
В Bash if
следует команда. Если код выхода этой команды равен 0, то then
часть выполняется, иначе выполняется else
часть, если она есть.
Вы можете сделать это с помощью любой команды, как описано в других ответах: if /bin/true; then ...; fi
[[
это внутренняя команда bash, предназначенная для некоторых тестов, таких как существование файла, сравнение переменных. Аналогичным образом [
, это внешняя команда (обычно она находится в /usr/bin/[
), которая выполняет примерно те же тесты, но нуждается ]
в качестве окончательного аргумента, поэтому ее ]
необходимо дополнить пробелом слева, а это не так ]]
.
Здесь вам не нужно [[
ни [
.
Другое дело, как вы цитируете вещи. В bash есть только один случай, когда пары кавычек вкладывают, это так "$(command "argument")"
. Но у 'grep 'SomeString' $File'
вас есть только одно слово, потому что 'grep '
это единица в кавычках, которая соединяется с, SomeString
а затем снова соединяется с ' $File'
. Переменная $File
даже не заменяется своим значением из-за использования одинарных кавычек. Правильный способ сделать это grep 'SomeString' "$File"
.