我正在尝试编写一个脚本,为那些比我更不懂 Linux 的技术人员处理 Ubuntu 服务器的一些维护工作。
当我以管理员身份运行脚本(需要访问 mysql)时,它会提示我正确输入密码,mysql 命令成功启动,但以下命令未运行。终端只是停留在那里,没有继续或失败。
任何知道我做错了什么的事情都会很有帮助。我做了一些研究,但没有找到解决方案,而且很难用 Google 搜索。
#! /bin/sh
mysql -p fog
DELETE FROM `hosts` WHERE `hostID` = '0';
#more DELETE commands in here, removed for brevity
DELETE FROM tasks WHERE taskTypeId=8;
$Shell
答案1
该mysql
命令需要从标准输入读取命令。您可以使用脚本提供此信息这里的文件:
#! /bin/sh
mysql -p fog <<'EOF'
DELETE FROM 'hosts' WHERE 'hostID' = '0';
#more DELETE commands in here, removed for brevity
DELETE FROM tasks WHERE taskTypeId=8;
EOF
一旦命令退出,控制权将返回到 shell mysql
。用引号括住第一个'EOF'
(或同样好的\EOF
或"EOF"
)可防止 shell 扩展内容 - 对于您示例中的命令来说这不是问题,但类似于的命令SELECT * FROM
会将扩展*
为文件列表。实际字符串EOF
是任意的。
答案2
另一种可能性是创建 2 个文件:一个用于您的 bash 脚本(例如mybash
,另一个用于 SQL 命令(mydeletes.sql
):
我的巴士
#! /bin/sh
mysql -p fog <<mydeletes.sql
我的删除操作
DELETE FROM 'hosts' WHERE 'hostID' = '0';
#more DELETE commands in here, removed for brevity
DELETE FROM tasks WHERE taskTypeId=8;
这会将 SQL 代码与 bash 代码分开。它将允许您在许多(如果不是全部)SQL 工具(DBeaver、Workbench……)中加载、执行和调试 SQL 脚本