2017-03-14 12 views
0

私はFreeBSD11です。私のシステムには1つ以上のzfsプールがあります。私は、スクリプトは、プールの状態を確認し、データベースを更新したい、私のコードは次のとおりです。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

は、私はあなたのコード内の二つの問題を参照してください。

ヒアドキュメントマーカー「EOF」はインデントしてはならない
  1. 君はそれリライトあなたのSQL

で単一引用符が必要です。

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

参照:

+0

は、実際に私はシェルスクリプトでのsqliteについて検索しstackoverflowの中でそのコードを見つけ、ご返信をお願い致します。今私はあなたの答えでコードを再現する、それはエラー 'のSyntaxエラーがあります:予期しないファイルの終わり(期待して"完了 ")'、。私はコードの最後に 'done'を置いた。 –

+1

コードを確認する[shellcheck](http://shellcheck.net) – codeforester

+0

これは私の正しいコードです: '#!/ bin/sh プール= $(/ sbin/zpool status | grep pool | awk '{print $ 2 } '| grepの状態| I $プール に 状態= $(/ sbinに/ zpoolのステータス$ {I}を行うための) awkは '{} $ 2印刷') エコー' myTbleは= '\' のステータスを設定し、更新'' $ status '' \ ''; '| sqlite3

mydb.db done' –

関連する問題