#!/bin/bash
VAR019='priusr'
VAR901='pripasswd'
echo "CREATE DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO '${VAR019}'@'localhost' IDENTIFIED BY '${VAR901}';
这将输出
: command not found
: command not found
: command not found
: command not found
我该如何解决这个问题?我究竟做错了什么?
答案 0 :(得分:2)
我建议使用here document来降低引用的复杂性。
#!/bin/bash
VAR019='priusr'
VAR901='pripasswd'
cat <<HERE
CREATE DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO '${VAR019}'@'localhost' IDENTIFIED BY '${VAR901}';
HERE
怀疑论者,这是输出:
CREATE DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'priusr'@'localhost' IDENTIFIED BY 'pripasswd';
答案 1 :(得分:1)
确保您的文件正确使用EOL(换行符分隔符。)
前段时间我遇到了完全相同的问题,这是由换行符\r\n
(Windows风格)而不是\n
(Linux风格)引起的。
在这种情况下,Linux假定\r
是命令的名称并尝试调用它。但\r
是“隐形”字符,这就是看起来奇怪的错误信息的原因。
有关如何将CRLF转换为LF的信息,请参阅this link。
答案 2 :(得分:0)
我只是剪切并粘贴了你在程序中添加的内容。我唯一的问题是没有关闭双引号引号。
我得到了以下输出:
CREATE DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'priusr'@'localhost' IDENTIFIED BY 'pripasswd';
这似乎是你想要的。
:command not found
很奇怪。例如,这是我输入废话时的结果:
$ asdas
bash: asdas: command not found.
这看起来似乎BASH没有执行你的脚本,或者 想 它正在执行你的脚本,但它确实正在执行另一个脚本。使用which
命令并确保正在执行您的脚本版本。
您也可以使用bash
命令本身:bash myscript.sh
。这样,您将验证您的脚本是否正在使用BASH shell执行,并且它是您正在执行的脚本,而不是您路径中的其他脚本。
另一种可能性是/bin/bash
不是bash
可执行文件实际所在的位置。您可能也想验证它。我知道我在运行带有#! /usr/bin/perl
的Perl脚本时已经看到了这一点,Perl实际上位于/bin/perl
或/usr/local/bin/perl
。
还要确保您的shebang格式正确。例如,#
之前没有空格,而且它是该行的第一个字符。 !
就在英镑标志旁边。某些处理器或shell在shebang和命令解释器的名称之间只需要一个空格。