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,testespera que um de seus argumentos seja]e queixará se isso estiver faltando. Portanto, useif [ -f /etc/motd ]e NÃOif [-f /etc/motd]