我有以下bash脚本,应该下载当前维基百科ZIM文件,如果文件大小不同:
#!/bin/bash
wikipedia_current_filesize=$(stat -c %s wikipedia.zim)
wikipedia_download_filesize=$(curl -s -L -I https://download.kiwix.org/zim/wikipedia_de_all_maxi.zim | gawk -v IGNORECASE=1 '/^Content-Length/ { print $2 }')
echo "Wikipedia filesize [current / download]:"
echo "$wikipedia_current_filesize / $wikipedia_download_filesize"
if [ "$wikipedia_current_filesize" != "$wikipedia_download_filesize" ]
then
echo "Downloading newer version of Wikipedia..."
else
echo "No new version for Wikipedia available."
fi
输出为:
Wikipedia filesize [current / download]:
38095908569 / 38095908569
Downloading newer version of Wikipedia...
数字完全相同。为什么我仍然进入if
而不是else
分支?我比较字符串的方式不对吗?也许有一个更有意义的方式,例如通过比较整数而不是字符串?
HTTP响应使用rn
行结尾。
gawk的默认记录分隔符是newline,它将回车作为一个普通字符留在最后一个字段中。可以去掉尾随回车
wikipedia_download_filesize=$(
curl -s -L -I https://download.kiwix.org/zim/wikipedia_de_all_maxi.zim
| gawk -v IGNORECASE=1 '/^Content-Length/ { print gensub(/r$/, "", 1, $2) }'
)
或者,更尴尬的
wikipedia_download_filesize=$(
curl -s -L -I https://download.kiwix.org/zim/wikipedia_de_all_maxi.zim
| gawk -v IGNORECASE=1 -v RS='rn' '/^Content-Length/ { print $2 }'
)