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
然后我用了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.
正确的代码
解析
这些是普通
test
命令,所以 POSIX-ly[...]
,不需要双括号。这不是一个
test
命令,所以它周围没有括号。笔记
不需要
bash
,sh
将在此脚本中执行。sh
出于可移植性目的,我只能建议坚持使用 POSIX shell ( )。md5sum
已被取代,例如sha512sum
. 没有散列算法是完美的,但md5sum
众所周知,它尤其不具有抗冲突性。sha512sum
只要您不需要额外的短哈希,我只能推荐使用。阅读更多关于test 命令的内容。
或者,阅读更多关于POSIX的信息。