再次问好Stackoverflow,
是否有方法让ldapsearch返回" 1"如果找到单个记录,如果没有找到记录则为0;如果在ldap中找到多个记录,则为2(或更大)。我希望能够测试记录,如果返回1,则采取一些预定义的操作。我知道我可以设置$ something = 0然后执行ldapsearch>> $ something然后测试$ something!= 0但这不能有效利用内存或处理时间,并可能导致意外的"有趣的"在我的脚本中。这还需要对$ something执行额外的测试,这将为批处理作业增加更多时间。
ldapsearch -LLL -h ds389.some.org -p 389 -D" uid = someAdmin,o = some.org" -w SOMEpassWord -b" ou = People,o = some.org" -s sub'(&(RMailAliases = zzz)(!(RMid = d *)))'
答案 0 :(得分:3)
echo `ldapsearch -LLL -h ds389.some.org -p 389 -D "uid=someAdmin,o=some.org" -w SOMEpassWord -b "ou=People,o=some.org" -s sub '(&(RMailAliases=zzz)(!(RMid=d*)))' dn | grep dn: | wc -l`
应该做你想做的事。
答案 1 :(得分:0)
令人震惊的是,ldapsearch(自2.4.44起)在不匹配事件上不会返回非零结果。在手册页中:
诊断 如果没有错误发生,则退出状态为零。错误会导致退出状态为非零,并且诊断消息会写入标准错误。
鉴于该产品的年龄,这种情况不太可能改变。
@heiglandreas提供了一个合理的解决方案,但这可能会更好:
ldapsearch -LLL <ldap-connection-options <ldap-search-query> dn |
grep -q ^dn:
无论如何,dn
属性都是ldapsearch的输出,因此指定它可以使其输出最小化,而-LLL
选项则抑制ldapsearch的多余输出。如果找不到匹配项,则POSIX grep的-q
选项可确保整个管道以非零值退出。
如果您需要将结果作为文本字符串,只需在上述步骤之后执行echo $?
。或者,您可以将grep替换为grep -c ^dn:
,如果找到,将输出1
,如果找不到,则输出0
。