How to escape a single quote inside a double quote string in bash script?
I am trying to run the follow bash code:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='abc'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
sudo apt-get update
echo debconf mysql-server/root_password password $DB_USER_PASSWORD | sudo debconf-set-selections
echo debconf mysql-server/root_password_again password $DB_USER_PASSWORD | sudo debconf-set-selections
sudo apt-get -qq install mysql-server > /dev/null # Install MySQL quietly
sudo mysql -uroot -p123 -e "CREATE SCHEMA ${DB_MAGENTO} DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
The error I am getting is ERROR at line 1: Unknown command '''.
Seems to be related with '${DB_USER}'
.
How to escape these single quotes properly?
UPDATE
Afetr @Sergiy suggestion I am getting another error:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='ila'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
mysql -uroot -p123 -e "SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
Error:
$ sudo ./installMagento.sh
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| db_magento |
| mysql |
| performance_schema |
| sys |
+--------------------+
ERROR 1064 (42000) at line 1: 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 '123' at line 1
bash mysql
add a comment |
I am trying to run the follow bash code:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='abc'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
sudo apt-get update
echo debconf mysql-server/root_password password $DB_USER_PASSWORD | sudo debconf-set-selections
echo debconf mysql-server/root_password_again password $DB_USER_PASSWORD | sudo debconf-set-selections
sudo apt-get -qq install mysql-server > /dev/null # Install MySQL quietly
sudo mysql -uroot -p123 -e "CREATE SCHEMA ${DB_MAGENTO} DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
The error I am getting is ERROR at line 1: Unknown command '''.
Seems to be related with '${DB_USER}'
.
How to escape these single quotes properly?
UPDATE
Afetr @Sergiy suggestion I am getting another error:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='ila'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
mysql -uroot -p123 -e "SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
Error:
$ sudo ./installMagento.sh
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| db_magento |
| mysql |
| performance_schema |
| sys |
+--------------------+
ERROR 1064 (42000) at line 1: 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 '123' at line 1
bash mysql
add a comment |
I am trying to run the follow bash code:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='abc'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
sudo apt-get update
echo debconf mysql-server/root_password password $DB_USER_PASSWORD | sudo debconf-set-selections
echo debconf mysql-server/root_password_again password $DB_USER_PASSWORD | sudo debconf-set-selections
sudo apt-get -qq install mysql-server > /dev/null # Install MySQL quietly
sudo mysql -uroot -p123 -e "CREATE SCHEMA ${DB_MAGENTO} DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
The error I am getting is ERROR at line 1: Unknown command '''.
Seems to be related with '${DB_USER}'
.
How to escape these single quotes properly?
UPDATE
Afetr @Sergiy suggestion I am getting another error:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='ila'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
mysql -uroot -p123 -e "SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
Error:
$ sudo ./installMagento.sh
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| db_magento |
| mysql |
| performance_schema |
| sys |
+--------------------+
ERROR 1064 (42000) at line 1: 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 '123' at line 1
bash mysql
I am trying to run the follow bash code:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='abc'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
sudo apt-get update
echo debconf mysql-server/root_password password $DB_USER_PASSWORD | sudo debconf-set-selections
echo debconf mysql-server/root_password_again password $DB_USER_PASSWORD | sudo debconf-set-selections
sudo apt-get -qq install mysql-server > /dev/null # Install MySQL quietly
sudo mysql -uroot -p123 -e "CREATE SCHEMA ${DB_MAGENTO} DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
The error I am getting is ERROR at line 1: Unknown command '''.
Seems to be related with '${DB_USER}'
.
How to escape these single quotes properly?
UPDATE
Afetr @Sergiy suggestion I am getting another error:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
DB_USER='ila'
DB_USER_PASSWORD='123'
DB_MAGENTO='db_magento'
mysql -uroot -p123 -e "SHOW DATABASES;CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY ${DB_USER_PASSWORD};GRANT ALL PRIVILEGES ON * . * TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;"
Error:
$ sudo ./installMagento.sh
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| db_magento |
| mysql |
| performance_schema |
| sys |
+--------------------+
ERROR 1064 (42000) at line 1: 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 '123' at line 1
bash mysql
bash mysql
edited 6 hours ago
zwitterion
asked 7 hours ago
zwitterionzwitterion
3411516
3411516
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You should not need to use with double quotes:
$ DB_USER='abc'; echo "test '${DB_USER}'"
test 'abc'
Alternatively, you can break the double quote, and escape the single quote - that's where it's necessary:
$ DB_USER='abc'; echo "test"'"${DB_USER}"'
test'abc'
Yet another way would be to use printf
with command substitution and using hex value for the quote (x27
):
sudo mysql -uroot -p123 -e "$(printf 'CREATE SCHEMA x27%sx27 DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER x27%sx27@x27localhostx27 IDENTIFIED BY %s ; GRANT ALL PRIVILEGES ON * . * TO x27%sx27@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;' ${DB_MAGENTO} ${DB_USER} ${DB_USER_PASSWORD} ${DB_USER})"
Side note: you have 3 commands in the script calling sudo
. This is redundant. Just run the whole script as sudo myscript.sh
and remove the need to add sudo
to each of those lines.
hey @Sergiy, thanks for you suggestion. I've tried your first suggestion but I still getting an issue. I dont understand what could be. I put an update.
– zwitterion
6 hours ago
1
Ok I have found the issue. Should have a single quote in password also.
– zwitterion
6 hours ago
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1110668%2fhow-to-escape-a-single-quote-inside-a-double-quote-string-in-bash-script%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You should not need to use with double quotes:
$ DB_USER='abc'; echo "test '${DB_USER}'"
test 'abc'
Alternatively, you can break the double quote, and escape the single quote - that's where it's necessary:
$ DB_USER='abc'; echo "test"'"${DB_USER}"'
test'abc'
Yet another way would be to use printf
with command substitution and using hex value for the quote (x27
):
sudo mysql -uroot -p123 -e "$(printf 'CREATE SCHEMA x27%sx27 DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER x27%sx27@x27localhostx27 IDENTIFIED BY %s ; GRANT ALL PRIVILEGES ON * . * TO x27%sx27@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;' ${DB_MAGENTO} ${DB_USER} ${DB_USER_PASSWORD} ${DB_USER})"
Side note: you have 3 commands in the script calling sudo
. This is redundant. Just run the whole script as sudo myscript.sh
and remove the need to add sudo
to each of those lines.
hey @Sergiy, thanks for you suggestion. I've tried your first suggestion but I still getting an issue. I dont understand what could be. I put an update.
– zwitterion
6 hours ago
1
Ok I have found the issue. Should have a single quote in password also.
– zwitterion
6 hours ago
add a comment |
You should not need to use with double quotes:
$ DB_USER='abc'; echo "test '${DB_USER}'"
test 'abc'
Alternatively, you can break the double quote, and escape the single quote - that's where it's necessary:
$ DB_USER='abc'; echo "test"'"${DB_USER}"'
test'abc'
Yet another way would be to use printf
with command substitution and using hex value for the quote (x27
):
sudo mysql -uroot -p123 -e "$(printf 'CREATE SCHEMA x27%sx27 DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER x27%sx27@x27localhostx27 IDENTIFIED BY %s ; GRANT ALL PRIVILEGES ON * . * TO x27%sx27@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;' ${DB_MAGENTO} ${DB_USER} ${DB_USER_PASSWORD} ${DB_USER})"
Side note: you have 3 commands in the script calling sudo
. This is redundant. Just run the whole script as sudo myscript.sh
and remove the need to add sudo
to each of those lines.
hey @Sergiy, thanks for you suggestion. I've tried your first suggestion but I still getting an issue. I dont understand what could be. I put an update.
– zwitterion
6 hours ago
1
Ok I have found the issue. Should have a single quote in password also.
– zwitterion
6 hours ago
add a comment |
You should not need to use with double quotes:
$ DB_USER='abc'; echo "test '${DB_USER}'"
test 'abc'
Alternatively, you can break the double quote, and escape the single quote - that's where it's necessary:
$ DB_USER='abc'; echo "test"'"${DB_USER}"'
test'abc'
Yet another way would be to use printf
with command substitution and using hex value for the quote (x27
):
sudo mysql -uroot -p123 -e "$(printf 'CREATE SCHEMA x27%sx27 DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER x27%sx27@x27localhostx27 IDENTIFIED BY %s ; GRANT ALL PRIVILEGES ON * . * TO x27%sx27@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;' ${DB_MAGENTO} ${DB_USER} ${DB_USER_PASSWORD} ${DB_USER})"
Side note: you have 3 commands in the script calling sudo
. This is redundant. Just run the whole script as sudo myscript.sh
and remove the need to add sudo
to each of those lines.
You should not need to use with double quotes:
$ DB_USER='abc'; echo "test '${DB_USER}'"
test 'abc'
Alternatively, you can break the double quote, and escape the single quote - that's where it's necessary:
$ DB_USER='abc'; echo "test"'"${DB_USER}"'
test'abc'
Yet another way would be to use printf
with command substitution and using hex value for the quote (x27
):
sudo mysql -uroot -p123 -e "$(printf 'CREATE SCHEMA x27%sx27 DEFAULT CHARACTER SET utf8;SHOW DATABASES;CREATE USER x27%sx27@x27localhostx27 IDENTIFIED BY %s ; GRANT ALL PRIVILEGES ON * . * TO x27%sx27@'localhost'; FLUSH PRIVILEGES;SELECT Host,User,Password FROM mysql.user;' ${DB_MAGENTO} ${DB_USER} ${DB_USER_PASSWORD} ${DB_USER})"
Side note: you have 3 commands in the script calling sudo
. This is redundant. Just run the whole script as sudo myscript.sh
and remove the need to add sudo
to each of those lines.
edited 6 hours ago
answered 6 hours ago
Sergiy KolodyazhnyySergiy Kolodyazhnyy
71k9147311
71k9147311
hey @Sergiy, thanks for you suggestion. I've tried your first suggestion but I still getting an issue. I dont understand what could be. I put an update.
– zwitterion
6 hours ago
1
Ok I have found the issue. Should have a single quote in password also.
– zwitterion
6 hours ago
add a comment |
hey @Sergiy, thanks for you suggestion. I've tried your first suggestion but I still getting an issue. I dont understand what could be. I put an update.
– zwitterion
6 hours ago
1
Ok I have found the issue. Should have a single quote in password also.
– zwitterion
6 hours ago
hey @Sergiy, thanks for you suggestion. I've tried your first suggestion but I still getting an issue. I dont understand what could be. I put an update.
– zwitterion
6 hours ago
hey @Sergiy, thanks for you suggestion. I've tried your first suggestion but I still getting an issue. I dont understand what could be. I put an update.
– zwitterion
6 hours ago
1
1
Ok I have found the issue. Should have a single quote in password also.
– zwitterion
6 hours ago
Ok I have found the issue. Should have a single quote in password also.
– zwitterion
6 hours ago
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1110668%2fhow-to-escape-a-single-quote-inside-a-double-quote-string-in-bash-script%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown