Сценарий Bash для поиска записей LDAP

У меня есть сценарий bash, который следует использовать для удаления определенного пользователя, если он существует в группе.

Сначала я извлек все имена групп и сохранил их в файл. В качестве следующего шага я подумал, что мне следует проанализировать файл и использовать команду ldapsearch для всех записей и выполнить поиск пользователя, а если он существует, использовать ldapmodify для его удаления.

Мой вопрос в том, как написать условие if, то есть if [ *ldapsearch query* == True];then

Вот как выглядит мой ldapsearch, и первая строка внутри цикла while должна быть оператором if.

while read grp;do
        ldapsearch -w 'ldappass' -D "cn=adminuser,dc=some-domain,dc=com"  -b "cn=$grp,ou=group,dc=some-domain,dc=com"  | grep $someuser
done</home/someuser/tempfile.txt

В интерфейсе командной строки этот запрос ldapsearch возвращает следующие выходные данные;

memberUid: testuser

По сути, если оператор if возвращает какое-то значение (т. е. пользователь существует), то я должен удалить пользователя. Как мне получить правильный оператор if, чтобы получить результат True или False для запроса ldapsearch?


person rahuL    schedule 13.08.2013    source источник


Ответы (1)


Вы можете использовать опцию -z, которая проверяет, является ли строка пустой или нет. [ -z "$string" ] истинно, если строка пуста. Тогда это может сделать это:

if [ ! -z "$(yourcommand)" ]; then
    do_things
fi

Например, скажем, мы хотим проверить, пуст ли каталог:

if [ ! -z "$(ls)" ]; then
   echo "there is something"
else
   echo "this dir is empty"
fi

Все вместе:

while IFS= read -r grp;do
   if [ ! -z "$(ldapsearch -w 'ldappass' -D "cn=adminuser,dc=some-domain,dc=com"  -b "cn=$grp,ou=group,dc=some-domain,dc=com" | grep $someuser)" ]; then
      remove $someuser
   fi
done < /home/someuser/tempfile.txt
person fedorqui 'SO stop harming'    schedule 13.08.2013