Ввод пользователя в оператор MySQL

0

У меня есть сценарий bash, который я бы хотел использовать, чтобы вытащить IP-адрес из базы данных. Кажется, я не могу заполнить 1 доллар.

Команда:./goto.sh 2010.

Я хочу, чтобы он занял 2010 год и искал в нем базу данных.

goto.sh:

#!/bin/bash
ip='mysql -Ns wksips -e 'SELECT IP FROM ips WHERE ID LIKE '%'''$1''';'

echo $ip

У меня есть знак%, потому что все единицы начинаются с wks, например wks2010.

Я попытался изменить кавычки, но он все еще терпит неудачу при запуске в mysql.

++ mysql -Ns wksips -e 'SELECT IP FROM ips WHERE ID LIKE% $ 1' ОШИБКА 1064 (42000) в строке 1: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с "% $ 1" в строке 1

Цените любую помощь.

Теги:

1 ответ

2
Лучший ответ

Я бы написал так:

ip=$(mysql -Ns wksips -e "SELECT IP FROM ips WHERE ID LIKE '%$1'")

Используйте двойные кавычки на уровне аргументов оболочки, что позволяет расширять переменные типа $1 внутри строки с двумя кавычками.

Затем используйте одиночные кавычки только для разграничения строкового литерала в синтаксисе SQL.

Я предпочитаю $(...) вместо back-ticks для подстановки команд в shell. Использование $(...) отлично, потому что, если самой команде нужна некоторая подстановка команд, вы можете удерживать вложенность этих структур столько, сколько хотите. Выполнение того же самого с помощью back-ticks требует обратных косых черт, и это становится безумным.

  • 0
    работал отлично. Спасибо, что нашли время, чтобы объяснить использование цитат и скобок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню