올바른 코드

올바른 코드

Ubuntu 16.04 - 미세 조정해 보세요

이게 내 코드야

#!/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

새로운 .md5sum을 생성하는 조건문을 작성하는 데 문제가 있습니다. 나는 조건문의 어느 부분이 잘못되었는지 알아내려고 노력하고 있는데 이것이 shellcheck가 나에게 알려주는 것입니다.

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.

몇 가지 비교를 통해 모든 작업을 수행할 수 있지만 비교를 추가하면 더 빠르고 깔끔한 스크립트를 얻을 수 있을 것 같습니다.

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

그런 다음 쉘체크를 사용했습니다.

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.

답변1

올바른 코드

#!/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

분석하다

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

이는 일반적인 명령이므로 testPOSIX에서는 [...]이중 괄호가 필요하지 않습니다 .

! md5sum -c .md5sum > /dev/null

이것은 명령이 아니므 test로 주위에 괄호가 없습니다.

노트

  1. 아니요 bash, sh이 스크립트에서는 수행할 수 있습니다. 이식성을 위해 sh가능하다면 POSIX 셸( ) 만 사용하는 것이 좋습니다 .

  2. md5sum예를 들어 로 대체되었습니다 sha512sum. 해싱 알고리즘은 완벽하지 않지만 md5sum특히 충돌에 강하지 않은 것으로 알려져 있습니다. sha512sum추가로 짧은 해시가 필요하지 않은 경우 에만 권장할 수 있습니다 .

  3. 자세히 알아보기테스트 명령.

  4. 또는 자세히 알아보기POSIX.

관련 정보