Existem 2 questões.
1 terminações de linha
syntax error near unexpected token '$'do\r''
Parece que você usou finais de linha no estilo da Microsoft ( \r\n
ou CR-LF) em vez de estilo Unix ( \n
ou somente LF). A maioria dos intérpretes de shell não gosta disso.
Você pode converter os finais de linha com dos2unix
:
dos2unix bulkCopyFiles.sh
2 Escolha do intérprete / Shebang
Você precisa colocar um Shebang no início do seu script Bash para indicar que deve ser interpretado por Bash .
#!/bin/bash
for file in Cadence*
do
mv -i "${file}" "${file/John/Krishna}"
done
Caso contrário, o Linux usará como padrão o interpretador /bin/sh
, que não é o Bash no Ubuntu, mas algum outro interpretador parecido com o Bourne, com um conjunto de recursos de linguagem menor (no Ubuntu é o Dash). >). Nesse caso, Dash não está familiarizado com a substituição do padrão de Bash expansão de parâmetro .
Apêndice: Shellcheck
Use Shellcheck (também disponível no pacote epônimo shellcheck
) para verificar a sintaxe do seu scripts de shell. Para o seu, sugere:
Line 1:
for file in Cadence*
^-- SC2148: Tips depend on target shell and yours is unknown. Add a shebang.