Como construir uma comparação que resultaria em um novo md5sum se as condições fossem atendidas

1

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 ao criar a instrução condicional que resultaria em um novo .md5sum. Estou tentando descobrir qual parte da instruçã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.

Eu posso fazer todo o processo com algumas comparações, mas acho que vou conseguir um script mais rápido e mais limpo se entrar nas 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.
    
por needtoknow 31.03.2018 / 21:21

1 resposta

1

Código adequado

#!/bin/sh

if [ ! -f .md5sum ] || [ -f .md5sum ] && ! md5sum -c .md5sum > /dev/null
then
    echo "All conditions have been met to generate a new md5sum for inventory.csv ..."
    md5sum inventory.csv > .mds5sum
fi

Análise

[ ! -f .md5sum ]
[ -f .md5sum ]

Estes são comandos comuns de test , então POSIX-ly [...] , não há necessidade de colchetes duplos.

! md5sum -c .md5sum > /dev/null

Este não é um comando test , então não há colchetes ao redor dele.

Notas

  1. Não é necessário usar bash , sh neste script. Eu só posso recomendar ficar com shell POSIX ( sh ), desde que você pode para fins de portabilidade.

  2. md5sum foi substituído, por ex. com sha512sum . Nenhum algoritmo hash é perfeito, mas md5sum é conhecido por não ser resistente a colisões, especialmente. Só posso recomendar o uso de sha512sum , desde que você não precise de hash extra curto.

  3. Leia mais sobre o comando de teste .

  4. Opcionalmente, leia mais sobre POSIX .

por 01.04.2018 / 07:35