2013-09-26 84 views
2

我有一個名爲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 +xchown root:root腳本。

現在,當我嘗試運行它時,輸出爲:

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

我預計2,因爲有我在/ var手動查看sixty_options.frmsite_settings.frm有/ LIB/mysql /下ferdinel_db/

我添加-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 

有在的分貝像\ r

+0

你在使用Cygwin嗎? –

+0

你的問題在這裏:databaseName ='echo $ {getdb#* \「} | tr -d'」; '' – technosaurus

+0

與你的問題沒有關係:看起來'database_useranme =「ferdinel」中有個拼寫錯誤;' - 無論如何,變量 –

回答

5

你的腳本有CRLF結局結束的東西。嘗試使用dos2unix或編輯器中的設置修復它。

+1

如果你沒有'dos2unix',運行這個命令:'perl -pi -e's @ \ r $ @@'script.sh' – pts

+0

或者sed:'sed -i's | \ R $ ||」文件' – konsolebox

+0

我會嘗試它並通知給你們。感謝你的幫助! –

1

更改你的腳本的頂部行:

#!/bin/bash -x 

並運行它。這會讓你更好地瞭解腳本中發生了什麼。

+0

感謝! –

0

我只是想通了!

首先爲了確實發生了什麼,我在#!/bin/bash的末尾添加-x

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

我看到\ r在+ databaseName=$'ferdinel_db\r'結束。對此的研究,這就是我們所說的由於該文件是在Windows中編輯的,因此Windows回車返回

所以要在ferdinel_db年底消除\r,我在tr -d '"; '

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

添加\r這解決了我的問題。感謝您的幫助!

+0

我很高興我們可以幫助解決您的問題。如果你接受@ konsolebox的答案,那會很好,因爲他指出了問題。 – BitWise

相關問題