2011-09-16 53 views
0
#!/bin/bash 

    VAR019='priusr' 
    VAR901='pripasswd' 

    echo "CREATE DATABASE ftp; 
    GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO '${VAR019}'@'localhost' IDENTIFIED BY '${VAR901}'; 

這將輸出Bash寫變量? :找不到命令

: command not found 
    : command not found 
    : command not found 
    : command not found 

我該如何解決這個問題?我究竟做錯了什麼?

+0

'var019'還存在小寫/大寫問題 – sehe

回答

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

變量替換不會使用引號完成,請使用雙引號替代 –

+0

或者使用反斜槓在下一行繼續當前語句。 –

+2

@ Arnaud/@ Blagovest:您的評論與我的回答沒有任何關係。請移動他們到這個問題? – sehe

1

確保您的文件使用權EOL(換行分隔)。

我前段時間的問題完全一樣,是由新行代碼\r\n(Windows風格)而不是\n(Linux風格)引起的。

在這種情況下,Linux假定\r是命令的名稱並嘗試調用它。但\r是「隱形」字符,這就是爲什麼看起來奇怪的錯誤信息。關於如何將CRLF轉換爲LF,請參閱this link

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可執行文件實際位於的位置。你可能也想驗證一下。我知道我在運行Perl腳本時看到了這種情況,頂部有#! /usr/bin/perl,Perl實際上位於/bin/perl/usr/local/bin/perl

另外請確保您的shebang格式正確。例如,#之前沒有空格,並且它是行中的第一個字符。 !緊鄰英鎊符號。一些處理器或shell在shebang和命令解釋器的名稱之間只需要一個空格。