N 来自 cURL 的 HTML 重定向数量

N 来自 cURL 的 HTML 重定向数量

我的小脚本从 csv 文件中提取 DOI,以检查它们是否正确。该数字应该等于3,如果不等于,我想输出一条消息。

#!/bin/bash

doi=j.1540-6261.2011.01681.x
num_redirect=[[ curl -L -s -w %{num_redirects} "http://dx.doi.org/"$doi -o /dev/null ]]

echo $num_redirect

if (( "$num_redirect" -eq 3 ))
then
  echo $doi " is correct"
else
  echo $doi " is wrong"
fi

虽然num_redirects似乎3在我的终端中,但我不断收到错误((: -lt 3 : syntax error in expression (error token is "3 ")和错误的输出。

然后我检查是否num_redirect实际上是一个整数

case $num_redirect in
   ''|*[!0-9]*) echo bad ;;
   *) echo good ;;
esac

(https://stackoverflow.com/a/3951175/3621464)我收到了bad

现在我想知道什么样的输出curl -s -w %{num_redirects}echo ${#num_redirect}说它有0长度。

答案1

curl命令已执行,但其输出未分配给num_redirect。这意味着显示了curl 的输出,即“3”(没有换行符)。但是,运行时会插入换行符echo $num_redirect,因为变量为空。这给您的印象是该变量num_redirect的值为“3”。

您应该使用反引号或$()执行命令并在标准输出上捕获其输出。

num_redirect=$(curl -L -s -w %{num_redirects} "http://dx.doi.org/"$doi -o /dev/null)

[另外,您应该使用和将该变量与整数进行比较]。现在您再次只是评估该命令。

if [ "$num_redirect" -eq 3 ]
then
    ...
else
    ...
fi

相关内容