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

时间:2013-09-26 21:38:56

标签: 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/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

然后我chmod +x使用chown root:root脚本。

现在,当我尝试运行它时,输出为:

$database_sixtysec = "ferdinel_db";
: No such file or directory_db
0

我希望2,因为当我在/ var / lib / mysql / ferdinel_db /

中手动查看时,有 sixty_options.frm site_settings.frm

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

db的末尾有一些东西,比如 \ r

3 个答案:

答案 0 :(得分:5)

您的脚本有CRLF结尾。尝试使用dos2unix或编辑器中的设置进行修复。

答案 1 :(得分:1)

将脚本的第一行更改为:

#!/bin/bash -x

然后运行它。这将使您更好地了解脚本中发生的事情。

答案 2 :(得分:0)

我只是搞清楚了!

首先为了实际发生的事情,我在-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_db\r'的末尾看到了\ r \ n。关于这一点的研究,我们称之为 Windows回车,因为该文件是在Windows中编辑的。

为了消除\r末尾的ferdinel_db,我在\r

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

这解决了我的问题。感谢您的帮助!