Bash 检查wget';s返回值
我正在编写一个脚本来下载一堆文件,我希望它在某个特定文件不存在时发出通知Bash 检查wget';s返回值,bash,if-statement,wget,Bash,If Statement,Wget,我正在编写一个脚本来下载一堆文件,我希望它在某个特定文件不存在时发出通知 r=`wget -q www.someurl.com` if [ $r -ne 0 ] then echo "Not there" else echo "OK" fi 但执行时会出现以下错误: /file:line 2:[:-ne:应为一元运算符 怎么了?$r是wget的文本输出(您用反勾号捕获了它)。要访问返回代码,请使用$?变量。wget ruffingthewitness.biz&&echo“我们成功了”|
r=`wget -q www.someurl.com`
if [ $r -ne 0 ]
then echo "Not there"
else echo "OK"
fi
但执行时会出现以下错误:
/file:line 2:[:-ne:应为一元运算符
怎么了?
$r
是wget的文本输出(您用反勾号捕获了它)。要访问返回代码,请使用$?
变量。
为空,因此如果[-ne 0],您的条件将变为
并且似乎将-ne
用作一元运算符。请尝试以下操作:
wget -q www.someurl.com
if [ $? -ne 0 ]
...
编辑正如Andrew在我前面解释的那样,backticks返回标准输出,而
$?
返回上一次操作的退出代码。其他人已经正确发布,您可以使用$?
获取最新的退出代码:
wget_output=$(wget -q "$URL")
if [ $? -ne 0 ]; then
...
这可以让您捕获标准输出和退出代码。如果您实际上不关心它打印的内容,您可以直接测试它:
if wget -q "$URL"; then
...
如果要抑制输出,请执行以下操作:
if wget -q "$URL" > /dev/null; then
...
你可以
wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure"
-(~)----------------------------------------------------------(07:30 Tue Apr 27)
risk@DockMaster [2024] --> wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure"
--2010-04-27 07:30:56-- http://ruffingthewitness.com/
Resolving ruffingthewitness.com... 69.56.251.239
Connecting to ruffingthewitness.com|69.56.251.239|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `index.html.1'
[ <=> ] 14,252 72.7K/s in 0.2s
2010-04-27 07:30:58 (72.7 KB/s) - `index.html.1' saved [14252]
WE GOT IT
-(~)-----------------------------------------------------------------------------------------------------------(07:30 Tue Apr 27)
risk@DockMaster [2025] --> wget ruffingthewitness.biz && echo "WE GOT IT" || echo "Failure"
--2010-04-27 07:31:05-- http://ruffingthewitness.biz/
Resolving ruffingthewitness.biz... failed: Name or service not known.
wget: unable to resolve host address `ruffingthewitness.biz'
zsh: exit 1 wget ruffingthewitness.biz
Failure
-(~)-----------------------------------------------------------------------------------------------------------(07:31 Tue Apr 27)
risk@DockMaster [2026] -->
wget ruffingthewitness.com&&echo“我们成功了”| | echo“失败”
-(4月27日星期二07:30)
risk@DockMaster[2024]->wget ruffingthewitness.com&&echo“我们成功了”| | echo“失败”
--2010-04-27 07:30:56-- http://ruffingthewitness.com/
解析ruffingthewitness.com…69.56.251.239
正在连接到ruffingthewitness.com | 69.56.251.239 |:80…已连接。
HTTP请求已发送,正在等待响应…200确定
长度:未指定[text/html]
保存到:`index.html.1'
[]0.2s内14252 72.7K/s
2010-04-27 07:30:58(72.7kb/s)-'index.html.1'已保存[14252]
我们知道了
-(4月27日星期二07:30)
risk@DockMaster[2025]->wget ruffingthewitness.biz&&echo“我们成功了”| | echo“失败”
--2010-04-27 07:31:05-- http://ruffingthewitness.biz/
解析ruffingthewitness.biz…失败:名称或服务未知。
wget:无法解析主机地址'ruffingthewitness.biz'
zsh:1号出口wget ruffingthewitness.biz
失败
-(4月27日星期二07:31)
risk@DockMaster [2026] -->
我一直在尝试所有解决方案,但没有幸运
wget以非交互方式执行。这意味着wget在后台工作,并且您不能用$
一种解决方案是处理“-server response”属性,搜索http 200状态码
例如:
注意:wget需要一些时间来完成他的工作,因此我把“sleep 5”放在这里。这不是最好的方法,但对于测试解决方案来说效果不错。从wget捕获结果并检查呼叫状态的最好方法
wget -O filename URL
if [[ $? -ne 0 ]]; then
echo "wget failed"
exit 1;
fi
通过这种方式,您可以检查wget的状态以及存储输出数据
这是解释询问者为什么会收到错误消息的唯一答案。+1.使用此表单时,
if
将获得程序的退出代码是标准的吗?(if;then…
)虽然这是正确的,但更好的解释应该是为什么$r
为空以及为什么会出现错误消息。不鼓励只使用代码的答案。请写一些解释说明它是如何工作的?
wget -O filename URL
if [[ $? -ne 0 ]]; then
echo "wget failed"
exit 1;
fi