创建一个脚本文件下载有校验和验证
题
我想创建一个shellscript读文件的一个。diz文件,其中信息的关于各种来源的文件存储,这需要编制有一定的软件(imagemagick在这种情况下)。我使用的是Mac OS x豹10.5为这个例子。
基本上,我想要有一个简单的方法来维护这些。diz文件举行的信息新来源的软件包。我只是需要更新这些。diz文件与网址,版本的信息和文件校验和。
例线:
libpng:1.2.42:libpng-1.2.42.tar.bz2?use_mirror=biznetnetworks:http://downloads.sourceforge.net/project/libpng/00-libpng-stable/1.2.42/libpng-1.2.42.tar.bz2?use_mirror=biznetnetworks:9a5cbe9798927fdf528f3186a8840ebe
脚本部分:
while IFS=: read app version file url md5
do
echo "Downloading $app Version: $version"
curl -L -v -O $url 2>> logfile.txt
$calculated_md5=`/sbin/md5 $file | /usr/bin/cut -f 2 -d "="`
echo $calculated_md5
done < "files.diz"
实际上我有更多的不仅仅是一个问题,关于这一点。
- 如何计算和比较校验和最好的吗?我想储存md5校验。diz文件和比较串比"切割"婷出的字符串
- 是否有一个方式告诉卷曲的另一个文件保存?(在我的情况的文件变得丑陋libpng-1.2.42.焦油。bz2?use_mirror=biznetnetworks)
- 我似乎有问题的反引号,应该直接的输出管md5和切入变量$calculated_md5.是的语法错误的吗?
谢谢!
解决方案
while IFS=: read app version file url md5
do
echo "Downloading $app Version: $version"
#use -o for output file. define $outputfile yourself
curl -L -v $url -o $outputfile 2>> logfile.txt
# use $(..) instead of backticks.
calculated_md5=$(/sbin/md5 "$file" | /usr/bin/cut -f 2 -d "=")
# compare md5
case "$calculated_md5" in
"$md5" )
echo "md5 ok"
echo "do something else here";;
esac
done < "files.diz"
其他提示
以下是一个切合实际的-衬:
curl -s -L <url> | tee <destination-file> |
sha256sum -c <(echo "a748a107dd0c6146e7f8a40f9d0fde29e19b3e8234d2de7e522a1fea15048e70 -") ||
rm -f <destination-file>
包裹在一个功能把3个参数:-url -目的地 -sha256
download() {
curl -s -L $1 | tee $2 | sha256sum -c <(echo "$3 -") || rm -f $2
}
我 curl
有一个 -o
(--output
)选择指定一个输出的文件。还有一个问题与你分配到 $calculated_md5
.它不应该与美元标志的当前分配给它。我没有 /sbin/md5
在这里,所以我不能评论。我做什么都是 md5sum
.如果你拥有它你可能会认为它作为一种替代方法。特别是,它有一个 --check
选项工作从一个文件清单md5sums可能方便您的情况。禾田.
不隶属于 StackOverflow