【问题标题】:Check return code in bash while capturing text捕获文本时检查 bash 中的返回码
【发布时间】:2017-03-10 19:23:00
【问题描述】:

在运行 ldapsearch 时,我们会得到一个指示成功或失败的返回码。这样我们就可以使用 if 语句来检查是否成功。

使用调试失败时,如果证书验证失败,则会打印出来。如何在检查 ldapsearch 成功或失败时捕获命令的输出?

ldapIP=`nslookup corpadssl.glb.intel.com | awk '/^Address: / { print $2 }' | cut -d' ' -f2`
server=`nslookup $ldapIP |  awk -F"= " '/name/{print $2}'`
ldap='ldapsearch -x -d8 -H "ldaps://$ldapIP" -b "dc=corp,dc=xxxxx,dc=com" -D "name@am.corp.com" -w "366676" (mailNickname=sdent)"'
while true; do
    if [[ $ldap ]] <-- capture text output here ??
    then
        :
    else
        echo $server        $ldapIP     `date` >> fail.txt
    fi
    sleep 5
done

【问题讨论】:

  • ldapsearch之后检查$?
  • 顺便说一句,将命令存储在字符串中是非常糟糕的做法。请参阅BashFAQ #50 和(回复:evalBashFAQ #48。如果您不是意味着将命令的文本存储在字符串中,而只是意味着存储其输出,那么......好吧,那是一个完全不同的问题。

标签: bash if-statement output conditional


【解决方案1】:

按照@codeforester 的建议,您可以使用$? 来检查最后一条命令的返回码。

ldapIP=`nslookup corpadssl.glb.intel.com | awk '/^Address: / { print $2 }' | cut -d' ' -f2`
server=`nslookup $ldapIP |  awk -F"= " '/name/{print $2}'`
while true; do
    captured=$(ldapsearch -x -d8 -H "ldaps://$ldapIP" -b "dc=corp,dc=xxxxx,dc=com" -D "name@am.corp.com" -w "366676" "(mailNickname=sdent)")
    if [ $? -eq 0 ]
    then
        echo "${captured}"
    else
        echo "$server        $ldapIP     `date`" >> fail.txt
    fi
    sleep 5
done

编辑:在@rici 建议下(因为我忘了这样做)... ldap 需要在 if 之前运行。

EDIT2:在@Charles Duffy 的建议下(我们会到达那里),我们不需要将命令存储在变量中。

【讨论】:

  • 那行不通。在$? 之前执行的最后一个命令是true(来自while 循环),它总是成功。我认为您需要在某处实际调用 ldap 命令。
  • 为什么我们将命令存储在字符串中,然后调用eval,而不是直接运行命令?我们在这里添加了漏洞(如果有人可以用TXT 记录替换ldapIP 的DNS 条目,他们可以由于eval 在服务器上运行任意命令),并且没有任何好处。
  • 考虑您的nslookup 是否返回找到的第二个单词包含$(IFS=,;rm,-rf,$HOME) 的结果。如果你不使用eval,那将是无害的,但事实上......
  • ...顺便说一句,引用你的扩展来回声会更好; echo "$captured" -- 那样是空格,&c。不受干扰。 echo "$server $ldapIP $(date)" 也一样。
  • 顺便说一句,你也可以将if captured=$(...); then全部放在一行上,根本不需要检查$?
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2010-09-13
  • 2014-12-23
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多