Linux 导致此错误的原因:没有此类文件或目录
我有一个名为database.php的文件。在该文件中: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_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'`