检查wget的返回值[if]

Igo*_*gor 32 bash wget

我正在编写一个脚本来下载一堆文件,我想让它告知特定文件何时不存在.

r=`wget -q www.someurl.com`
if [ $r -ne 0 ]
  then echo "Not there"
  else echo "OK"
fi
Run Code Online (Sandbox Code Playgroud)

但它在执行时给出以下错误:

./file: line 2: [: -ne: unary operator expected

怎么了?

Cas*_*bel 66

其他人已正确发布您可以$?用来获取最新的退出代码:

wget_output=$(wget -q "$URL")
if [ $? -ne 0 ]; then
    ...
Run Code Online (Sandbox Code Playgroud)

这使您可以捕获stdout和退出代码.如果您实际上并不关心它打印的内容,您可以直接测试它:

if wget -q "$URL"; then
    ...
Run Code Online (Sandbox Code Playgroud)

如果你想抑制输出:

if wget -q "$URL" > /dev/null; then
    ...
Run Code Online (Sandbox Code Playgroud)

  • 感谢您完成接受的答案. (4认同)

And*_*ico 39

$r是wget的文本输出(你用反引号捕获).要访问返回代码,请使用该$?变量.

  • 虽然这是正确的,但更好的解释是为什么`$ r`为空以及为什么会出现错误消息. (2认同)

Bol*_*olo 13

$r是空的,因此你的条件变得if [ -ne 0 ]好像似乎-ne被用作一元运算符.试试这个:

wget -q www.someurl.com
if [ $? -ne 0 ]
  ...
Run Code Online (Sandbox Code Playgroud)

编辑正如Andrew在我之前解释的那样,反引号返回标准输出,同时$?返回最后一个操作的退出代码.

  • 这是解释为什么提问者收到错误消息的唯一答案.+1. (3认同)

kSi*_*SiR 10

你可以

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] --> 
Run Code Online (Sandbox Code Playgroud)

  • 不鼓励仅使用代码回答。请写一些关于它如何工作的解释? (2认同)

小智 6

从 wget 捕获结果并检查呼叫状态的最佳方法

wget -O filename URL
if [[ $? -ne 0 ]]; then
    echo "wget failed"
    exit 1; 
fi
Run Code Online (Sandbox Code Playgroud)

这样您就可以检查 wget 的状态并存储输出数据。

  1. 如果调用成功,则使用存储的输出

  2. 否则它将退出并显示错误 wget failed