我有一个名为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
答案 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'`
这解决了我的问题。感谢您的帮助!