Ubuntu 16.04 - tentando ajustar
Aqui está o meu código
#!/bin/bash
# if the .md5sum file doesn't exists
# or if the .md5sum file exists && doesn't match, recreate it
# but if the .md5sum file exists && matches then break and log
csvfile=inventory.csv
if [ ! -f .md5sum ] || [ -f .md5sum ] && [ ! md5sum -c .md5sum >/dev/null ]; then
md5sum "$csvfile" > .md5sum
else
echo "$csvfile file matched md5sum ..."
break
fi
Estou tendo problemas para criar a instrução condicional que resultaria em um novo .md5sum. Estou tentando descobrir qual parte da declaração condicional está errada e é isso que o shellcheck me diz.
root@me ~ # shellcheck run.sh
In run.sh line 8:
if [ ! -f .md5sum ] || [ -f .md5sum ] && [ ! md5sum -c .md5sum >/dev/null ]; then
^-- SC1009: The mentioned parser error was in this if expression.
^-- SC1073: Couldn't parse this test expression.
^-- SC1072: Expected "]". Fix any mentioned problems and try again.
Posso fazer todo o processo com algumas comparações, mas acho que conseguirei um script mais rápido e limpo se juntar as comparações.
Eu também verifiquei o código por Jesse_P
#!/bin/bash
csvfile=inventory.csv
echo "hello" > inventory.csv
md5sum "$csvfile" > .md5sum
echo "well hello" > inventory.cvs
if [[ ! -f .md5sum ]] || [[ -f .md5sum && ! md5sum -c .md5sum >/dev/null ]]; then
echo "All conditiions have been met to generate a new md5sum for inventory.csv ..."
md5sum inventory.csv > .mds5sum
fi
exit 0
Então eu usei shellcheck
root@0003 ~ # shellcheck run.sh
In run.sh line 8:
if [[ ! -f .md5sum ]] || [[ -f .md5sum && ! md5sum -c .md5sum >/dev/null ]]; then
^-- SC1009: The mentioned parser error was in this if expression.
^-- SC1073: Couldn't parse this test expression.
^-- SC1072: Expected "]". Fix any mentioned problems and try again.
Código adequado
Análise
Estes são
test
comandos comuns, então POSIX-ly[...]
, não há necessidade de colchetes duplos.Este NÃO é um
test
comando, portanto, NÃO há colchetes em torno dele.Notas
Não há necessidade de
bash
,sh
fará neste script. Só posso recomendar que você fique com o shell POSIX (sh
) o máximo que puder para fins de portabilidade.md5sum
foi substituído, por exemplo, comsha512sum
. Nenhum algoritmo de hash é perfeito, masmd5sum
é conhecido por não ser especialmente resistente a colisões. Só posso recomendar o usosha512sum
desde que você não precise de hash extra curto.Leia um pouco mais sobre o comando test .
Opcionalmente, leia um pouco mais sobre POSIX .