Linux 导致此错误的原因:没有此类文件或目录

Linux 导致此错误的原因:没有此类文件或目录,linux,bash,shell,Linux,Bash,Shell,我有一个名为database.php的文件。在该文件中: database_useranme = "ferdinel"; database_sixtysec = "ferdinel_db"; 现在我制作了一个脚本来获取数据库“ferdinel_db”,下面是我的脚本: #!/bin/bash #To get the line that has a "database_sixtysec =" getdb=`grep "database_sixtysec =" < /www/vhost/d

我有一个名为database.php的文件。在该文件中:

database_useranme = "ferdinel";
database_sixtysec = "ferdinel_db";
现在我制作了一个脚本来获取数据库“ferdinel_db”,下面是我的脚本:

#!/bin/bash

#To get the line that has a "database_sixtysec ="
getdb=`grep "database_sixtysec =" < /www/vhost/database.php`

# To verify Output what's inside in get_db
echo "$getdb"   

# This one is to get the ferdinel_db
databaseName=`echo ${getdb#*\"} | tr -d '"; '`         

#Below is to count the file if exist in $databaseName variable (ferdinel_db)
countFlag=`ls /var/lib/mysql/$databaseName | grep 'sixty_options.frm\|site_settings.frm' | wc -l` 

#Ouput Either 0 , 1 or 2
echo $countFlag
我希望是2,因为在/var/lib/mysql/ferdinel\u db中手动查看时,有60个选项/

我在
#的末尾添加了-x/bin/bash
这是什么输出:

' getdb='$database_sixtysec = "ferdinel_db";
'+ echo 'ferdinel_db";
++ tr -d '"; '
+ databaseName=$'ferdinel_db\r'
' echo '$database_sixtysec = "ferdinel_db";
$database_sixtysec = "ferdinel_db";
++ ls $'/var/lib/mysql/ferdinel_db\r'
++ grep 'sixty_options.frm\|site_settings.frm'
++ wc -l
: No such file or directorycssv25_db

在db的末尾有一个类似\r

的东西,您的脚本有CRLF结尾。尝试使用
dos2unix
或编辑器中的设置来修复它。

将脚本的顶行更改为:

#!/bin/bash -x
然后运行它。这将使您更好地了解脚本中发生的事情。

我只是想弄明白

首先,我在
#的末尾添加了
-x
/bin/bash

#/bin/bash-x

当我运行它时,您可以查看所有进程,这是输出:

' getdb='$database_sixtysec = "ferdinel_db";
'+ echo 'ferdinel_db";
++ tr -d '"; '
+ databaseName=$'ferdinel_db\r'
' echo '$database_sixtysec = "ferdinel_db";
$database_sixtysec = "ferdinel_db";
++ ls $'/var/lib/mysql/ferdinel_db\r'
++ grep 'sixty_options.frm\|site_settings.frm'
++ wc -l
: No such file or directorycssv25_db
我在
+databaseName=$'ferdinel\u db\r'
的末尾看到了\r。关于这一点的研究,我们称之为Windows回车,因为文件是在Windows中编辑的

因此,为了消除
\r
ferdinel_db
末尾的
\r
tr-d'”;

databaseName=`echo ${getdb#*\"} | tr -d '"; \r'`

这就解决了我的问题。感谢你们的帮助!

如果你们没有
dos2unix
,请运行以下命令:
perl-pi-e's@\r$@'script.sh
或sed:
sed-i's | \r$|文件
我会试试并通知你们。谢谢你们的帮助!你们在使用Cygwin吗?你们的问题在这里:databaseName=
echo${getdb\\\\\\\\\\\\\\ tr d}"; '与您的问题无关:看起来
数据库\u useranme=“ferdinel”中有输入错误-无论哪种方式,variableHi@Henk都不重要,因为我只需要得到
数据库_sixtysec=“ferdinel_db”我很高兴我们能帮助解决您的问题。如果你接受@konsolebox的答案,那就太好了,因为他指出了问题所在。
databaseName=`echo ${getdb#*\"} | tr -d '"; \r'`