我想创建一个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"

实际上我有更多的不仅仅是一个问题,关于这一点。

  1. 如何计算和比较校验和最好的吗?我想储存md5校验。diz文件和比较串比"切割"婷出的字符串
  2. 是否有一个方式告诉卷曲的另一个文件保存?(在我的情况的文件变得丑陋libpng-1.2.42.焦油。bz2?use_mirror=biznetnetworks)
  3. 我似乎有问题的反引号,应该直接的输出管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可能方便您的情况。禾田.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top