在shell中获取错误的数字

时间:2018-05-18 00:57:19

标签: ksh

这是我的代码

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

你能告诉我哪里错了吗?

2 个答案:

答案 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