Мне нужно загрузить БД на сервер MySQL и следующая команда работает из оболочки:
Из оболочки
mysql -h "172.17.0.2" -u "root" -p"mypasswd" -Bse "create database mydb;"
Но не из скрипта, в котором ip и пароль являются переменными, передаваемыми в качестве аргументов:
Сценарий:
#!/bin/bash
set -e
sqlname=$1
sqlpass=$2
sqlip=$3
...
set -x
echo "Creating the database..."
mysql -h $sqlip -u "root" -p$sqlpass -Bse "create database mydb;"
Результат работы скрипта:
./myscript.sh mysql1 mypasswd 172.17.0.2
Создание базы данных ...
+ mysql -h 172.17.0.2 -u root -pmypasswd -Bse 'создать базу данных mydb;'
ОШИБКА 2003 (HY000): не удается подключиться к серверу MySQL на 172.17.0.2 (111)
- начать редактирование
Тот же результат для переменных внутри двойных кавычек:
#!/bin/bash
...
mysql -h "$sqlip" -u root -p"$sqlpass" -Bse "create database mydb;"
+ echo 'Создание базы данных ...«Создание базы данных ...
+ mysql -h 172.17.0.2 -u root -pmypasswd -Bse 'создать базу данных mydb;' ОШИБКА 2003 (HY000): не удается подключиться к серверу MySQL на 172.17.0.2 (111)
- конец редактирования
Двойные кавычки и одиночные кавычки с переменными внутри скрипта смущают меня.
Я упускаю что-то очевидное здесь об использовании переменных внутри и с кавычками.
Любой намек?