Bash脚本变量调用异常及SQL命令执行报错求助
我来帮你拆解下这些错误的核心原因,然后一步步给你修复方案:
错误根源拆解
mysqladmin工具误用mysqladmin是MySQL的轻量管理工具,只能执行有限的管理命令(比如快速创建/删除数据库),但不支持执行CREATE USER、GRANT这类完整SQL语句。你写的create wp_testtesttdjsuqwu语法也不对——mysqladmin创建数据库的正确格式是mysqladmin create 数据库名,不需要写完整的SQL语句前缀。SQL语句被当成Shell命令执行
脚本里的CREATE USER、GRANT、FLUSH、quit都是MySQL的SQL命令,但你直接把它们写在Shell脚本的行里,Shell会把这些当成系统命令去执行,而系统中根本不存在FLUSH、quit这类命令,所以才会报command not found。
具体修复步骤
你需要用mysql客户端(而非mysqladmin)来执行SQL语句,推荐用**Here Document(EOF)**的方式,把所有SQL操作打包传给MySQL,既能避免变量解析问题,也能让代码更整洁。
1. 替换错误的SQL执行代码
把脚本中原有的数据库操作代码,替换成类似下面的写法(请替换成你实际的MySQL root密码、变量名):
# 假设你已经定义了这些变量:ROOT_MYSQL_PASS(MySQL root密码)、DB_NAME、DB_USER、DB_PASS mysql -u root -p"$ROOT_MYSQL_PASS" <<EOF CREATE DATABASE wp_$DB_NAME; CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS'; GRANT ALL PRIVILEGES ON wp_$DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES; EOF
2. 可选:mysqladmin的正确用法
如果你坚持用mysqladmin创建数据库,语法应该是这样的(不需要写SQL的CREATE DATABASE前缀):
mysqladmin -u root -p"$ROOT_MYSQL_PASS" create wp_$DB_NAME
但还是更推荐上面的EOF写法,因为可以把所有数据库操作整合在一个块里,减少代码拆分的问题。
3. 变量引用的关键细节
确保所有变量(比如ROOT_MYSQL_PASS、DB_NAME)都用双引号包裹,避免变量中包含特殊字符(比如你示例里的密码qui2AenaihoQu9)时,被Shell错误拆分解析。
验证修复
修改后重新运行脚本,就不会再出现mysqladmin: Unknown command或者command not found的错误,数据库、用户和权限也能正常创建。
内容的提问来源于stack exchange,提问作者Patrick Peyre

