我的小脚本从 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