3

特定のソフトウェア(この場合はimagemagick)をコンパイルするために必要な、さまざまなソースファイルに関する情報が格納されている.dizファイルからファイルを読み取るシェルスクリプトを作成したいと思います。この例では、Mac OSXLeopard10.5を使用しています。

基本的に、最新のソースパッケージの情報を保持するこれらの.dizファイルを簡単に管理する方法が必要です。これらの.dizファイルをURL、バージョン情報、ファイルチェックサムで更新する必要があります。

行の例:

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つ以上の質問があります。

  1. チェックサムを計算して比較する方法は?md5チェックサムを.dizファイルに保存し、文字列を「切り取る」ことで文字列比較と比較したかった
  2. 保存する別のファイル名をcurlに指示する方法はありますか?(私の場合、ファイル名は醜いlibpng-1.2.42.tar.bz2?use_mirror = biznetnetworksになります)
  3. パイプされたmd5の出力を指示し、変数$calculated_md5にカットするバックティックに問題があるようです。構文が間違っていますか?

ありがとう!

4

3 に答える 3

6
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"
于 2010-01-18T14:03:21.277 に答える
0

curlには、出力ファイルを指定するための-o--output)オプションがあります。への割り当てにも問題があります$calculated_md5。あなたがそれに割り当てるとき、それは前にドル記号を持っているべきではありません。私は/sbin/md5ここにいないので、それについてコメントすることはできません。私が持っているのはですmd5sum。あなたもそれを持っているなら、あなたはそれを代わりと考えるかもしれません。特に、--checkあなたの状況に役立つかもしれないmd5sumsのファイルリストから機能するオプションがあります。HTH。

于 2010-01-18T14:08:23.637 に答える