2013-03-07 110 views
0

我已經創建了一個像這樣的shell腳本,但我得到授予命令的語法錯誤。請有人可以幫我嗎?逃脫字符與雙qoutes逃脫字符在shell腳本中的雙qou

ssh -t [email protected] ' 
su root -c " 
    echo \"Give db name :\"; 
    read db_name; 
    echo \"Give password :\"; 
    read db_pass; 
    host=localhost; 
    sql1=\"create database \$db_name;\"; 
    sql2=\"grant all on \${db_name}.* to \${db_name}@\${host} identified by \"\${db_pass}\";\"; 
    sql3=\"\${sql1}\${sql2}\"; 
    echo \"==============\"; 
    mysql -u root -p -e \"\${sql3}\"; 
"; 
' 
+0

您將數據庫對象的'GRANTS'賦予特定的'user',而不是數據庫名!修改您的語句,像這樣'sql2 = \「授予\\ {{db_name}。*全部\\ {用戶名} @ \ $ {主機} \ \ {\ {db_pass} \」; \「;' – Incognito 2013-03-07 06:18:41

+0

MYSQL會自動創建一個帶有用戶名的mysql用戶,無論我們給出了什麼。這裏的db_name是可變的,它包含一個字符串值,並且mysql將創建一個與db_name相同的用戶名的mysql用戶。 – user103134 2013-03-07 06:26:38

+0

這裏我認爲問題出現在grant命令中的\ $ db_pass之前和之後的字符 – user103134 2013-03-07 06:27:54

回答

0

我找到了解決方案。

通過在授予命令\${db_pass}之前和之後放"\\\"",我解決了這個問題。 grant命令很好地工作,沒有任何語法錯誤!

謝謝大家的支持。

ssh -t [email protected]2.0 ' 
su root -c " 
    echo \"Give db name :\"; 
    read db_name; 
    echo \"Give password :\"; 
    read db_pass; 
    host=localhost; 
    sql1=\"create database \$db_name;\"; 
    sql2=\"grant all on \${db_name}.* to \${db_name}@\${host} identified by "\\\""\${db_pass}"\\\"";\"; 
    sql3=\"\${sql1}\${sql2}\"; 
    echo \"==============\"; 
    mysql -u root -p -e \"\${sql3}\"; 
"; 
'