Получение плохого числа в оболочке - PullRequest
0 голосов
/ 18 мая 2018

Вот мой код

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 голосов
/ 18 мая 2018

Тест -eq сравнивает числовые значения.Поскольку $LSEARCH содержит нецифровые символы, это вызывает ошибку.

Переключитесь на [ "$LSEARCH" = " " ] или еще лучше [ -n "$LSEARCH" ], чтобы проверить, имеет ли $LSEARCH ненулевую длину,

Удобный справочникдля условных выражений ksh: http://www.well.ox.ac.uk/~johnb/comp/unix/man_ksh.html#condexp

0 голосов
/ 18 мая 2018
if [ "$LSEARCH" -eq " "  ]; then

В оболочке Korn оператор -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
...