2010-12-30 16 views
0

Haben Sie ein bash Menü, wo Variablen in Datei für mysql Eingabe schreiben. here was ich habe:BASH echo write mysql Eingabe

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 

Problem ist Variablen kennen zu zeigen, dass ich sie in einfachen Anführungszeichen setzen musste, zeigen die einfachen Anführungszeichen, wie ich für Fälle wie ‚$ mysqlu‘ will @ ‚localhost‘. Aber wie kann ich die Anführungszeichen entfernen und trotzdem die Variable in der Instanz wie CREATE DATABASE '$ mysqldbn' verwenden? Doppelzitate arbeiten auch nicht, ich bin ratlos.

Vielen Dank im Voraus, Joe

Antwort

1

ich hier sehe, Ihr Problem nicht wirklich, aber Sie ${mysqldbn} verwenden können die Variablennamen in bash zitieren würde, das helfen?

+0

Danke das ist was es brauchte! Problem wurde mysql nicht außer CREATE DATABASE "Beispiel"; – jmituzas

0

Sie sollten in der Lage sein, die einfachen Anführungszeichen wegzulassen, wo Sie sie nicht wollen.

Aber ich würde empfehlen, ein hier Dokument zu verwenden. Ungefähr:

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

Soweit ich weiß, müssen Sie doppelte Anführungszeichen verwenden, um Werte anzuzeigen, hier ist mein Beispiel:

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

Erzeugt:

MyValue 
$myvar 
${myvar} 

this helps