2010-12-30 4 views
0

У вас есть меню bash, где переменные записываются в файл для ввода mysql. Вот что у меня есть:BASH echo write mysql input

echo "CREATE DATABASE '$mysqldbn'; 

#GRANT ALL PRIVILEGES ON *.* TO '$mysqlu'@'$myhost' IDENTIFIED BY '$mysqlup' WITH GRANT OPTION; 

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON '$mysqldbn'.* TO '$mysqlu'@'$myhost' IDENTIFIED BY '$mysqlup'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON '$mysqldbn'.* TO '$mysqlu'@'$myip' IDENTIFIED BY '$mysqlup'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON '$mysqldbn'.* TO '$mysqlu'@'localhost' IDENTIFIED BY '$mysqlup'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES< LOCK TABLES on '$mysqldbn'.* TO '$mysqlu'@'$rip' IDENTIFIED BY '$mysqlup';" > nmysql.db 


mysql -u root -p$mypass < nmysql.db 

проблема, чтобы получить переменные, чтобы показать мне пришлось поставить их в одинарные кавычки, одиночные кавычки показать, как я хочу, за исключением случаев, как «$ mysqlu» @ «локальный». Но как я могу удалить кавычки и по-прежнему использовать переменную в экземпляре, например CREATE DATABASE '$ mysqldbn'? Двойные кавычки тоже не будут работать, я в недоумении.

Спасибо заранее, Джо

ответ

1

Я действительно не вижу вашу проблему, но вы можете использовать ${mysqldbn} процитировать имя переменной в Баш, Поможет?

+0

Спасибо, что вам нужно! Проблема была mysql wont, кроме CREATE DATABASE 'example'; – jmituzas

0

Вы должны иметь возможность опускать одинарные кавычки, где вы их не хотите.

Но я бы рекомендовал использовать документ здесь. Приблизительно:

mysql -u root -p$mypass <<EOF 

CREATE DATABASE $mysqldbn; 

#GRANT ALL PRIVILEGES ON *.* TO '$mysqlu'@'$myhost' IDENTIFIED BY '$mysqlup' WITH GRANT OPTION; 

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON '$mysqldbn'.* TO '$mysqlu'@'$myhost' IDENTIFIED BY '$mysqlup'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON '$mysqldbn'.* TO '$mysqlu'@'$myip' IDENTIFIED BY '$mysqlup'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON '$mysqldbn'.* TO '$mysqlu'@'localhost' IDENTIFIED BY '$mysqlup'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES< LOCK TABLES on '$mysqldbn'.* TO '$mysqlu'@'$rip' IDENTIFIED BY '$mysqlup'; 
EOF 
0

Насколько я знаю, вы должны использовать двойные кавычки, чтобы отобразить значения, вот мой пример:

#!/bin/bash 
myvar="MyValue" 
echo "$myvar" 
echo '$myvar' 
echo '${myvar}' 

Формирует:

MyValue 
$myvar 
${myvar} 

Надеется, что это помогает