2016-11-21 141 views
0

我在写一个bash脚本来返回用户的显示名称。当我在控制台上运行命令时,我得到显示名称。当我运行从文本文件读取输入的脚本时,我没有显示名称。ldapsearch输出到文本文件

对于[email protected],显示名称是这样的:Khbsd Muweu

输入文本文件(names.txt中)包含以下数据:

"[email protected]" 
"[email protected]" 
"[email protected]" 

该脚本是如下:

while IFS='' read -r line || [[ -n "$line" ]] 
do 
echo "$line" 
ldapsearch -v -LLL -Y GSSAPI -H ldap://padns1.abc.com -b "dc=abc,dc=com" userPrincipalName="$line" displayName -Q | grep "displayName: .*$" | awk '{print $2,$3}' 
done < "$1" 

这个脚本保存为fnames.sh和脚本运行为:

bash fnames.sh names.txt 

echo“$ line”打印文本文件中的内容,但ldapsearch命令不起作用。有人能让我在哪里我错了吗? 我想将命令的输出(只是显示名称)存储在文本文件中。我怎样才能做到这一点?

+1

你有没有尝试在你的脚本中添加'set -x'?这是一种快速验证您的脚本是否符合您的预期。 – eduffy

回答

2

如果您的输入文件实际上包含这些双引号,那就是导致问题的原因。

一旦展开,您将使用userPrincipalName=""[email protected]"",也就是说,字面上查找"[email protected]"(带引号),而不是[email protected](不含引号)。你还应该检查你的输入文件是否使用了正确的行尾。回车混入可以默默肆虐。

+0

拉马先生,是的报价是问题。它从输入文件中删除引号后工作。 – krish

+0

@CrazyKris - 如果此答案有助于解决您的问题,请使用投票箭头下的复选标记考虑[标记为已接受](https://stackoverflow.com/help/someone-answers)。谢谢! –