Фильтры поиска LDAP с использованием BASH

Я пытаюсь выполнить следующий запрос в сценарии bash, позволяя мне проверить два разных класса объектов для определенного атрибута, переданного из цикла while:

#!/bin/bash inputfile="$1" binddn="cn=admin,o=services" password="BLAH" IFS=',' while read -r Field1 Field2 Field3 Field4 Field5 Field6 ; do ldapsearch -h "`hostname --fqdn`" -p 389 -x -LLL -D "${binddn}" -w "${password}" "'(&(|(ObjectClass=Group1)(ObjectClass=Group2))(Field1Attribute="${Field1}"))'" done < "$inputfile" exit 0 

Каждый раз, когда я запускаю команду, переменная Field1 проходит успешно, но я получаю плохую ошибку фильтра поиска:

 ldapsearch -h HOSTNAME -p 389 -x -LLL -D cn=admin,o=services -w BLAH ''\''(&(|(ObjectClass=Group1)(ObjectClass=Group2))(Field1Attribute=FIELD1OUTPUT))'\''' ldapsearch: ldap_search_ext: Bad search filter (87) 

Я заметил, что команда добавляет ('' \ ') в начало и конец фильтра. Я запускаю команду вручную минус тики и обратная косая черта, запрос выполняется успешно. Как это добавляется?

Я также прошел как фильтр поиска как переменную, так и команду без успеха.

One Solution collect form web for “Фильтры поиска LDAP с использованием BASH”

Если вы это сделаете:

 ldapsearch -h ... "'(&(this)(that="${Field1}"))'" 

Одиночные кавычки будут частью строки с кавычками, и они перейдут в ldapsearch . Который их не ожидает, давая ошибку. Кроме того, расширение ${Field1} , так как вторая двойная кавычка заканчивает цитирование. (Цитаты не гнездятся.)

Ваш другой результат выглядит так же, как и выход xxtrace Bash. Он пытается сказать вам, что аргумент фактически содержит буквальную цитату, но цитату довольно трудно прочитать.

В этом:

 ''\''(&(|(ObjectClass=Group1)(ObjectClass=Group2))(Field1Attribute=FIELD1OUTPUT))'\''' 

у нас есть

 '' -- an empty string \' -- a literal backslash '(&(|(...))' -- a quoted string \' -- another literal backslash '' -- another empty string 

Я подозреваю, что вы хотите, либо

 ldapsearch -h ... "(&(this)(that=\"${Field1}\"))" 

с двойными кавычками в строке, идущей к ldapsearch , или

 ldapsearch -h ... "(&(this)(that=${Field1}))" 

без них.

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

Насколько я могу проверить на практике, это отлично работает на одной машине:

 $ user=itvirta $ ldapsearch -xLLL "(&(objectClass=shadowAccount)(uid=$user))" $ ldapsearch -xLLL '(&(objectClass=shadowAccount)(uid=itvirta))' 
  • как разделить длинную команду psql в скрипте bash на несколько строк
  • ловушка сценария bash для выхода и err и логика разницы
  • Как выполнить команду случайным образом в течение заданного интервала времени?
  • Ubuntu 14.04 Скрипт HDMI UDev
  • bash: проверьте, находится ли переменная в
  • file command + как просмотреть все результаты из команды file
  • Выход скрипта из другого скрипта через SSH
  • Много элит, есть ли лучший способ?
  • sh-скрипт, содержащий элемент perl, не производит такой же вывод через crontab как ручное выполнение
  • Опция ls -e недоступна в linux
  • Кластеризация идентичных файлов, игнорирующих пробелы и разрывы строк
  • Linux и Unix - лучшая ОС в мире.