2017-03-14 139 views
0

我在FreeBSD11上。我的系統上有一個或多個zfs池。我想一個腳本來檢查池狀態和更新數據庫,我的代碼是:Shell腳本來更新sqlite數據庫

pool=$(/sbin/zpool status | grep pool |awk '{print $2}') 
for i in $pool 
do 

    status=$(/sbin/zpool status ${i} | egrep -i '(ONLINE|DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED|corrupt|cannot|unrecover)') 

    sqlite3 <address>/my.db <<EOS 
      update myTable set status = $status where name = ${i}; 

    EOS 

    echo $status 
    done 

此代碼有錯誤,並且不更新我的數據庫。你能幫我弄清楚這個錯誤嗎?

回答

0

我看到你的代碼的兩個問題:

  1. 的定界符標記 「EOF」 不應該被縮進
  2. 你需要在你的SQL

單引號把它改寫爲:

sqlite3 <address>/my.db <<EOS 
      update myTable set status = '$status' where name = '$i'; 
EOS 

另請參見:

+0

感謝您的回覆,其實我搜索關於shell腳本源碼,發現在計算器代碼。現在我用你的答案回覆代碼,它有錯誤'語法錯誤:文件意外結束(期待「完成」)'。我在代碼的最後放置了'done'。 –

+1

用[shellcheck](http://shellcheck.net)檢查你的代碼 – codeforester

+0

這是我的正確代碼:'#!/ bin/sh pool = $(/ sbin/zpool status | grep pool | awk'{print $ 2 } ') 因爲我在$池 做 狀態= $(/ sbin目錄/的zpool status $ {I} | grep的狀態| awk的 '{打印$ 2}') 回聲' 更新myTble設置狀態= '\' ''$ status''';';'| sqlite3

mydb.db done' –