2013-06-20 60 views
0

即時通訊編輯嘗試編寫一個bash腳本,將執行一個MySQL查詢,如果結果數爲1,則執行一些操作。我不能讓它工作。bash中的條件語句與mysql查詢

#!/bin/sh 
file=`mysql -uroot -proot -e "select count(*) from MyTable.files where strFilename='file.txt'"` 
if [[ $file == "count(*) 1" ]]; 
then 
    echo $file 
else 
    echo $file 
    echo "no" 
fi 

我驗證了查詢的效果。我一直得到這個返回

count(*) 1 
no 

即時通訊不知道爲什麼,但我認爲它可能與變量$文件的類型有關。有任何想法嗎?

回答

0

我改寫了你的腳本,現在的工作:

#!/bin/sh 
file=`mysql -uroot -proot -e "select count(*) as count from MyTable.files where strFilename='file.txt'" | cut -d \t -f 2` 
if [ $file == "1" ]; 
then 
    echo $file 
else 
    echo $file 
    echo "no" 
fi 

我給一個更好的名字來計數字段,使用「切割」分裂mysql的輸出分爲兩個區域。並將第二個字段的內容放入$ file中。然後你可以測試$ file爲「1」。希望它可以幫助你..

+0

這是完美的,謝謝! – user2328273

0

我猜這不是count(*) 1而是count(*)\n1什麼的。 echo $file會將IFS中的所有字符轉換爲空格,但==將區分這些空格字符。如果是這種情況,echo "$file"會給你一個不同的結果。 (注意引號)。

+0

我提到的輸出正是:

[client] user="root" password="root" host="localhost" [mysql] database="MyTable" 

所以,雷納託代碼可以通過以下改寫它是如何出現的。也許你可以澄清一點,我不太明白你的意思。 – user2328273

+0

@ user2328273:您正在使用'echo $ file'。 'echo $ file'不同於'echo「$ file」'。嘗試添加引號,看看是否在「回顯」出來時看到換行符或製表符而不是空格。 – icktoofay

1

爲了防止在腳本中暴露數據庫憑據,可以將它們存儲在位於主目錄中的本地.my.cnf文件中。 這項技術將允許您的腳本無需修改即可在任何服務器上運行。


路徑:/home/youruser/.my.cnf 內容:

#!/bin/sh 
file=`mysql -e "select count(*) as count from files where strFilename='file.txt'" | cut -d \t -f 2` 
if [ $file == "1" ]; 
then 
    echo $file 
else 
    echo $file 
    echo "no" 
fi