2017-03-14 178 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' –