脚本:根据系统用户编写邮箱SQL记录

脚本:根据系统用户编写邮箱SQL记录

该命令有问题或者我没有看到我的错误。我还需要排除禁用用户和 UID 超过 500 的用户。这是我需要使用的 SQL 命令

INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `local_part`, `domain`, `created`, `modified`, `active`) VALUES ('$username, '$pass', '', '$xxxx', 0, 'xxx', 'xxx', 'date --rfc-3339=date', 'date --rfc-3339=date', 1);"

这是我写的剧本。 这是输出错误。

答案1

问题在于 SQL 中的反引号被 shell 视为命令替换。 shell 会尝试将反引号字符串作为命令运行,以将该位替换为该特定命令的输出。

shell 这样做是因为您的echo字符串带有双引号。

要解决这个特定问题,请将每个反引号转义为\`

理想情况下,您可以将 SQL 作为单引号字符串传递,但这意味着变量不会扩展。

你也可以这样做,这样会更安全:

printf 'INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `local_part`, `domain`, `created`, `modified`, `active`) VALUES ("%s", "%s", "", "%s", 0, "xxx", "xxx", "date --rfc-3339=date", "date --rfc-3339=date", 1);\n' "$username" "$pass" "$xxxx"

...假设您使用的特定数据库可以处理双引号字段数据。

相关内容