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 +x持っています。chown root:root

実行しようとすると、出力は次のようになります。

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

/var/lib/mysql/ferdinel_db/ を手動で表示すると、 sixty_options.frmsite_settings.frmがあるため、2 を期待します。

最後に-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のようなものがあります

4

3 に答える 3

5

スクリプトに CRLF エンディングがあります。dos2unixまたはエディタの設定で修正してみてください。

于 2013-09-26T21:42:54.803 に答える
1

スクリプトの一番上の行を次のように変更します。

#!/bin/bash -x

そしてそれを実行します。これにより、スクリプトで何が起こっているかをよりよく理解できます。

于 2013-09-26T21:48:53.017 に答える