意外的Shell脚本错误

时间:2018-01-05 18:58:13

标签: linux bash shell

我遇到错误,我将代码应该正常工作到shell文件中,当我运行它时,它无法正常运行。我从这里收到的错误让我感到困惑。这就是我所拥有的:

echo "Please enter your student ID: "
read username
echo "Please enter your MySQL password: "
read -s password
db="db$username"
echo "DB username is $db"
$(mysql -D$db -u$username -p$password -se "CREATE TABLE...")
echo "That has been completed"

SQL命令已被截断,因为它似乎与错误无关。

如果我通过putty运行此代码,我会得到:

*******@csl-*******:~/tasks/SQL$ ./generate.sh
Please enter your student ID:
': not a valid identifierad: `username
Please enter your MySQL password:
': not a valid identifierad: `password
DB username is db
ERROR 1045 (28000): Access denied for user '-p'@'localhost' (using password: NO)
./generate.sh: line 7: $'\r': command not found
That has been completed
*******@csl-*******:~/tasks/SQL$

(*表示隐藏值)

我不确定这段代码的错误是什么。我已经尝试过在不同的情况下,例如使用Mac创建具有完全相同文件的文件并通过终端运行它并且它工作正常(在同一个Linux服务器上)。然而,我也回到同一台Mac尝试重新运行代码并得到与此处所示相同的错误 - 即使代码没有改变。

  

一些背景资料:   使用Putty进行SSH访问,使用Filezilla进行FTP,使用Sublime Text进行代码编辑。连接到远程Linux服务器以从中运行。

1 个答案:

答案 0 :(得分:0)

我认为这是由于错误的行结束字符,如果你在windows中运行sublime就是这种情况。

尝试运行od -xcb以查找回车符。 Unix只需要\n,而你会看到\r\n带有回车符。

您可以通过运行dos2unix generate.sh来修复您的文件。

根据下面的Dannys评论,您可以转到 view>更改sublime中的设置行结尾> UNIX

<强>示例:

我复制了你的脚本并使用带有名为script.sh的unix回车的vim创建了一个文件。然后我使用unix2dos创建一个带有回车符的文件进行测试,并且能够重新创建错误。

Unix回车:

od -xcb script.sh
0000000    2123    622f    6e69    622f    7361    0a68    6365    6f68
      #   !   /   b   i   n   /   b   a   s   h  \n   e   c   h   o

Windows回车:

od -xcb windows.sh
0000000    2123    622f    6e69    622f    7361    0d68    650a    6863
      #   !   /   b   i   n   /   b   a   s   h  \r  \n   e   c   h

来自windows脚本的错误:

> . windows.sh

Please enter your student ID:
': not a valid identifier
Please enter your MySQL password:
': not a valid identifier
DB username is db12
That has been completed