由于某种原因,我有以下 bash 脚本 $LINE 值没有出现在 val= 上。我可以看到每个 $LINE 可以显示从文件中读取的行,但在 val.. 中定义时不会显示。
#/bin/bash
while read LINE
do
echo "Processing:" $LINE
val=`ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D "cn=admin,dc=testing,dc=com" id=$LINE | grep val`
echo $LINE "," $val
done < inputfile.txt
知道我在这里做错了什么吗?
答案1
根据您的问题,您的ldapsearch
.
对于初学者,我将启用详细输出,以便您可以看到命令的反引号部分如何扩展。
set -x
val=`ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
"cn=admin,dc=testing,dc=com" id=$LINE | grep val`
set +x
潜在的修复#2
我还会更改它,以便它使用$()
符号而不是反引号。
val=$(ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
"cn=admin,dc=testing,dc=com" id=$LINE | grep val)
潜在的修复#3
$LINE
另外,我会引用传递给 时的内容id=
。
val=$(ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
"cn=admin,dc=testing,dc=com" id="$LINE" | grep val)
潜在修复#4
最后,我尝试将管道从 更改|
为|&
,以便您可以从 解析 STDOUT 和 STDERR ldapsearch
。
一般提示
您始终可以通过将开关附加-x
到 shebang 行来启用 Bash 的完整详细输出。
#!/bin/bash -x
...script...
答案2
这可能是一个引用问题。相反,id=$LINE
您应该(通常)使用id="$LINE"
.对于 也一样echo $LINE
。