2012-02-17 61 views
0

我運行在命令行此腳本:bash腳本賦值和比較

check_databse_exist=`mysql -u root --password=root -Bse 'show databases' | egrep -v 'information_schema|mysql'` 
for db in $check_databse_exist; do 
if [ "$db" == "test_traffic" ] ; then 
    exist=1 
fi 
done 

if [ $exist -eq 1 ] ; then 
    #do other stuff 
fi 

exit 0 

爲什麼給它:

[: 16: jobeet: unexpected operator 
[: 16: jobeet_test: unexpected operator 
[: 16: landpage_db: unexpected operator 
[: 16: my_db: unexpected operator 
[: 16: symfony2: unexpected operator 
./cibuild: 24: [0: not found 

我只是想循環,如果發現集中存在= 1
謝謝

+0

嘗試刪除=和== – hovanessyan 2012-02-17 13:23:07

+0

周圍的所有空格請不要編輯您的問題,以便前面的有用答案看起來很愚蠢。在極少數情況下透明地添加更多的信息,否則啓動一個新的問題,如果你有一個新的問題。您的標題和標籤應該準確地反映您的問題,並且已答覆和接受的答案應符合您的問題,並且您只能接受一個問題。 – 2012-02-17 14:10:53

回答

3
if [$exist == 1] ; then 

由於一個shell腳本怪癖,你需要周圍的方括號的空間。他們不是可選的。

if [ $exist == 1 ]; then 

對於它的價值,你可以重構這一點,如果你只是要檢查一個表的存在,並沒有另外需要$check_databse_exist。這個想法是用grep替換for循環。

if mysql -u root --password=root -Bse 'show databases' | grep -qw test_traffic; then 
    # Database exists. 
fi 

grep -q產生沒有輸出,它只是返回成功或失敗。 grep -w是可選的,但一個很好的做法;它防止了表等test_traffic2從匹配。

1

更改爲:

check_databse_exist=`mysql -u root --password=root -Bse 'show databases' | egrep -v 'information_schema|mysql'` 
for db in $check_databse_exist; do 
    if [ "$db" == "test_traffic" ] ; then 
    exist=1 
fi 
done 

if [ $exist -eq 1 ] ; then 
    #do other stuff 
fi 

exit 0 
+0

謝謝我編輯了我的主要帖子(請參見主要帖子),但仍然得到[:16:jobeet:意外操作員 [:16:jobeet_test:意外操作員 [:16:landpage_db:意外操作員 [:16:my_db:意外操作者 [:16:的Symfony2:意外操作錯誤??? – 2012-02-17 13:37:04

+0

好像你仍然有一定的空間缺失。測試命令假設你的數據庫名稱是運算符... – Mithrandir 2012-02-17 14:14:53

+0

謝謝,但我選擇了內聯如果mysql -u root --password = root -Bse'show databases'| grep -qw test_traffic; :) – 2012-02-20 07:37:01