我有一个简单的脚本
wget -O file.zip www.site.com/asdqwdkjhasd.zip
unzip file.zip
我调用脚本
./script.sh
现在我的问题是,如果zip文件已损坏,则输出
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
如何在脚本中检测此文本?如果程序的输出包含字符串“未找到中心目录签名”。然后做点什么。
有时下载的zip已损坏,因此必须重新下载。如何检查输出是否为“未找到中心目录签名”。如果是这样重新下载,即执行wget并再次解压缩。换句话说,如何循环直到下载和提取成功?
我如何在bash脚本中实现这一点?
我感谢任何帮助!谢谢!
更新
对不起,我对这个问题做了一些改动。这是我试图解决的实际问题。感谢您的任何反馈!
答案 0 :(得分:1)
这是可能的,但通常不会。
您可以选择最后一个命令的退出代码,0是0错误,每隔一个值表示某种错误,特定于应用程序或只是一般错误。用$?您从最后一个命令获得退出代码,但您必须在相关命令后立即使用它。
((3 < 1)) ; err=$?; echo $err
1
((3 > 1)) ; err=$?; echo $err
0
错误消息通常取决于LOCALE设置:
erg=$(LC_ALL=C ls nosuchsamplefile 2>&1)
echo "$erg"
ls: cannot access 'nosuchsamplefile': No such file or directory
erg=$(ls nosuchsamplefile 2>&1)
echo $erg
ls: Zugriff auf 'nosuchsamplefile' nicht möglich: Datei oder Verzeichnis nicht gefunden
比较单词可能会失败并且本质上是不安全的。即使将命令设置为特定设置也无法阻止更新更改措辞,当然,用户已将其Locale设置为某个不同的值。
然而,2&gt; &amp; 1将错误流重定向到输出,这是屏幕的默认值,但在捕获时,它会产生影响。只要您自己编写脚本并在临时情况下,方法就会很有用,这些方法无法与多个用户进行扩展,也无法在多年内进行维护。