Мой скрипт предназначен для циклического перехода по средам, попадания в базу данных и проверки наличия связанного с ним имени пользователя/фамилии. Я не уверен, почему я получаю ошибку, указанную ниже.
#/bin/bash
#specify user to search for *******DO NOT PUT SPACE, ie. jaylefler
echo "Please enter user first name: "
read first_name
echo "Please enter user last name: "
read last_name
echo "Please enter LDAP User ID: "
read ldapuser
echo "Please enter LDAP password: "
stty -echo
read ldappw
stty echo
#logs to write output to
log="ui_${username}_access.log"
finallog="${username}_ui_access.txt"
#create file if not exist, else null it
[[ -f ${log} ]] && cat /dev/null > ${log} || touch ${log}
[[ -f ${finallog} ]] && cat /dev/null > ${finallog} || touch ${log}
#log it all
{
echo "environment"
sshpass -p $ldappw ssh [email protected] 'mysql -h host -u user - ppassword database -e \
"select user_id from users where first like "%'${first_name}'%" and last like "%'${last_name}'%";"'
} > $log
Когда я выполняю скрипт, я получаю следующие ошибки:
Please enter user first name:
jay
Please enter user last name:
lefler
Please enter LDAP User ID:
jlefler
Please enter LDAP password:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%jay% and last like %lefler%' at line 1
jlefler@ubuntu:~/Desktop$
Я не знаком с этим типом сценариев, но мне кажется, что вокруг% jay% и% lefler% должны быть цитаты, чтобы SQL выглядел как:
select user_id from users where first like '%jay%' and last like '%lefler%';
"select user_id from users where first like "'%${first_name}%'" and last like "'%${last_name}%'";"'
- помещая одинарные кавычки за пределы знаки процента. Я не знаком с этим типом сценариев, так что это может быть неправильно.
Запрос MySQL должен выводить примерно так:
SELECT * FROM pet WHERE name LIKE '%w%';
В bash один из способов конкатенации заключается в следующем:
mystring="some ${string1} arbitrary ${string2} text"
РЕДАКТИРОВАТЬ: Таким образом, объединение всех Плюсов делает что-то, чтобы расширить строки внутри ''. Проблема в том, что оболочка не может расширять строки между одиночными кавычками. Что-то вроде этого должно работать:
CommandFinale=$($sqlCommand -e "select user_id from users where first like '%${first_name}%' and last like '%${last_name}%';")
Затем используйте переменную CommandFinale
в цепочке соединений.
Я не могу проверить его, но это должно быть так или очень похоже.
echo
строкового запроса SQL, сделайте его переменной и повторите его, а затем опубликуйте здесь. Просто чтобы увидеть, какую цепочку он создает.
Основная проблема в вашем коде заключается в том, что кавычки находятся внутри знака процента. :)
Вторая проблема заключается в том, что вы создали нечто уязвимое для SQL-инъекции. Я не знаю, как создавать связанные параметры из сценария Bash, но вам нужно это понять!
'jay'
и'lefler'