这是我的代码
bash-3.2$ cat nexus.ksh
#!/usr/bin/ksh
LSEARCH=$(ldapsearch -p 389 -x -D "cn=xx" -w xxxx -b "ou=access,ou=nexus,ou=applications,o=xxx,c=xx" cn=$1 | grep -i uid=$2)
echo ldap search output is "${LSEARCH}"
if [ "$LSEARCH" -eq " " ]; then
echo " User is not present in ACL group...Adding User to ACL group"
else
echo "User is present in ACL Group"
fi
输出:
bash-3.2$ ./nexus.ksh acl.LINK_ODI_1 xxxx
ldap search output is uniquemember: uid=xxx,ou=people,ou=access,ou=nexus,ou=applications,o=xxxx,c=
./nexus.ksh[4]: uniquemember: uid=xxx,ou=people,ou=access,ou=nexus,ou=applications,o=xxx,c=: bad number
User is present in ACL Group
你能告诉我哪里错了吗?
答案 0 :(得分:1)
if [ "$LSEARCH" -eq " " ]; then
在Korn shell中,-eq
运算符用于数字值,而不是字符串。对于字符串,您应该使用=
,如下面的记录:
pax$ [ "pax diablo" -eq "pax diablo" ] && echo equal
ksh: [: pax diablo: arithmetic syntax error
pax$ [ "pax diablo" = "pax diablo" ] && echo equal
equal
pax$ [ 42 -eq 42 ] && echo equal
equal
顺便说一下,可能希望使用
ldapsearch
的返回值,而不是尝试解析输出(更有可能更改)。实现此目的的一种方法是执行搜索,忽略输出,并检查返回码:
ldapsearch whatever >/dev/null 2>&1
rc=$? ; [ $rc -ne 0 ] && echo ldapsearch failed with error $rc
答案 1 :(得分:1)
-eq
测试会比较数值。由于$LSEARCH
包含非数字字符,因此会导致您的错误。
切换到[ "$LSEARCH" = " " ]
或更好[ -n "$LSEARCH" ]
来测试$LSEARCH
是否有非零长度,
ksh条件表达式的方便参考:http://www.well.ox.ac.uk/~johnb/comp/unix/man_ksh.html#condexp