Окрім інших відповідей, які розповідали, як робити те, що ти хотів, я намагаюся пояснити, що було не так (а що ти хотів.
У Bash if
слід виконувати команду. Якщо вихідний код цієї команди дорівнює 0, то then
частина виконується, інакше else
частина, якщо така виконується.
Це можна зробити за допомогою будь-якої команди, як пояснено в інших відповідях: if /bin/true; then ...; fi
[[
це внутрішня команда bash, яка присвячена деяким тестам, наприклад, існуванню файлів, змінним порівнянням. Аналогічно [
це зовнішня команда (вона розташована, як правило, в /usr/bin/[
), яка виконує приблизно ті ж тести, але потребує ]
остаточного аргументу, і саме тому ]
необхідно забити пробіл ліворуч, з чим це не так ]]
.
Тут вам не потрібно [[
ні [
.
Інша справа, як ви цитуєте речі. У баші, є лише один випадок, коли пари цитат гніздяться, це "$(command "argument")"
. Але у 'grep 'SomeString' $File'
вас є лише одне слово, тому що 'grep '
це цитується одиниця, яка об'єднується з, SomeString
а потім знову конкатенована ' $File'
. Змінна $File
навіть не замінюється своїм значенням через використання одиничних лапок. Правильний спосіб це зробити grep 'SomeString' "$File"
.