如何在 bash 中的定界符之后使用控制运算符

Kha*_*yen 3 bash shell

我正在编写一个 bash 脚本来自动创建 MySQL 数据库。bash 脚本如下(请忽略那些变量 $db_name、$db_pwd...):

#!/bin/bash
sudo mysql -u root << EOF
    CREATE DATABASE $db_name;
    CREATE USER $db_user IDENTIFIED BY $db_pwd;
    GRANT ALL PRIVILEGES ON $db_name.* TO $db_user;
    quit
EOF
printf "Done"
Run Code Online (Sandbox Code Playgroud)

我希望数据库创建成功完成,然后运行打印命令。但我不能将 && 放在 EOF 之后,例如:

#!/bin/bash
sudo mysql -u root << EOF
    CREATE DATABASE $db_name;
    CREATE USER $db_user IDENTIFIED BY $db_pwd;
    GRANT ALL PRIVILEGES ON $db_name.* TO $db_user;
    quit
EOF &&
printf "Done"
Run Code Online (Sandbox Code Playgroud)

它会显示如下错误:

invalid command name "EOF"
    while executing
"EOF &&"
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Joh*_*ica 5

一个简单的解决方法是如果 mysql 失败则退出。

sudo mysql -u root << EOF || exit
    CREATE DATABASE $db_name;
    CREATE USER $db_user IDENTIFIED BY $db_pwd;
    GRANT ALL PRIVILEGES ON $db_name.* TO $db_user;
EOF
echo "Done"
Run Code Online (Sandbox Code Playgroud)

或者您可以添加set -e以使任何失败的命令立即退出脚本。

#!/bin/bash
set -e

sudo mysql -u root << EOF
    CREATE DATABASE $db_name;
    CREATE USER $db_user IDENTIFIED BY $db_pwd;
    GRANT ALL PRIVILEGES ON $db_name.* TO $db_user;
EOF
echo "Done"
Run Code Online (Sandbox Code Playgroud)