Como não tenho representante suficiente para adicionar esses comentários às respostas existentes, vou escrever uma nova resposta.
-
A atribuição de valores a uma variável no BASH usa apenas o nome da variável, sem o
$
-sign. Portanto, usefoo="something"
e NÃO$foo="something"
. -
[
é uma abreviação do programa / comandotest
. Comandos levam seus argumentos separados por espaços. Ao omitir o espaço após[
, você está dizendo à BASH para interpretar todo o conjunto de caracteres como uma palavra / string. Enquanto com o espaço, orest of the line
é passado como um argumento para o comandotest
. Quando invocado com[
, no entanto,test
espera que um de seus argumentos seja]
e queixará se isso estiver faltando. Portanto, useif [ -f /etc/motd ]
e NÃOif [-f /etc/motd]