У меня есть сценарий 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
Цените любую помощь.
Я бы написал так:
ip=$(mysql -Ns wksips -e "SELECT IP FROM ips WHERE ID LIKE '%$1'")
Используйте двойные кавычки на уровне аргументов оболочки, что позволяет расширять переменные типа $1
внутри строки с двумя кавычками.
Затем используйте одиночные кавычки только для разграничения строкового литерала в синтаксисе SQL.
Я предпочитаю $(...)
вместо back-ticks для подстановки команд в shell. Использование $(...)
отлично, потому что, если самой команде нужна некоторая подстановка команд, вы можете удерживать вложенность этих структур столько, сколько хотите. Выполнение того же самого с помощью back-ticks требует обратных косых черт, и это становится безумным.