#mysql #bash #shell
#mysql #bash #оболочка
Вопрос:
Я изменил все «‘» и «`» на «»‘, некоторые ошибки исчезли, но все еще не правильно Я редактирую код и ошибки ниже
Часть моего сценария оболочки выглядит следующим образом
#!/bin/bash
echo change $1 database
echo "Input dataBase password:"
read dbPasswd
if [ $1="Aa" ]; then
echo "Input old Aa ip:"
read oldAaip
echo "Input new Aa ip:"
read newAaip
mysql -uroot -p$dbPasswd << EOF
use Test_db
update "Test_controller" set node_ip = "$newAaip" where node_ip="$oldAaip";
update "Test_cluster" set admin_ip = "$newAaip" where admin_ip="$oldAaip";
update "Test_physical_volume" set connect_path ="$newAaip" where connect_path ="$oldAaip";
commit;
EOF
и я получил следующую ошибку после ./updateDB.sh Aa
change Aa database
Input dataBase password:
123456
Input old Aa ip:
1.1.1.1
Input new Aa ip:
1.1.1.2
ERROR 1064 (42000) at line 2: 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 '"Test_controller" set node_ip = "1.1.1.2" where node_ip="1.1.1.1"' at line 1
кто-нибудь скажет мне, почему это происходит?
Комментарии:
1. Bash пытается интерпретировать текст между ` ` как команду, предпочитающую » или «.
Ответ №1:
Обратная метка не является знаком кавычек, текст между обратными метками вычисляется. Итак, bash пытается оценить команду между обратными ссылками перед вашей глобальной командой.
Для имени вашей таблицы вам не нужно экранировать имя вашей таблицы, потому что это не зарезервированное имя. Но если вам это нужно, вы также должны экранировать свои обратные ссылки с помощью
caracter.
Комментарии:
1. Я изменил обратную ссылку, и некоторые ошибки исчезли, но некоторые все еще существуют. Не могли бы вы помочь проверить, есть ли еще что-то не так с моим синтаксисом bash? Сценарии sql работали правильно в командной строке mysql.
2. Можете ли вы попробовать без » для имени таблицы. Не уверен, что вам это нужно.
3. Да, ваше решение исправляет все ошибки, большое спасибо. Кстати, это оболочка, которая неправильно понимает » или mysql, которые рассматривают» как плохой синтаксис?
4. В mysql вы можете использовать ` для экранирования зарезервированного имени, но в bash ` вычисляется, поэтому вам нужно экранировать ` в bash.