Bash写变量? : 没有找到指令

时间:2011-09-16 12:53:19

标签: bash

 #!/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

我该如何解决这个问题?我究竟做错了什么?

3 个答案:

答案 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和命令解释器的名称之间只需要一个空格。