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 を生成する条件文の作成に問題があります。私は条件文のどの部分が間違っているかを調べようとしています。
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 ]
これは一般的なコマンドなので、test
POSIXでは[...]
二重括弧は必要ありません。
! md5sum -c .md5sum > /dev/null
これはコマンドではないtest
ため、周囲に括弧はありません。