循环SQlite3数据库,当查询发现第3个运行脚本时

时间:2009-09-27 02:01:12

标签: linux bash sqlite loops watch

当有人添加文件名和目录时,我有一个SQlite数据库被填充,然后我希望脚本读取最新的3个条目(使用“LIMIT 3”完成)然后我想要这个脚本来取这些3条目并为每个条目启动“script1.sh”,然后一旦script1完成了3中的一个,我希望它回顾SQlite数据库并检查是否有任何新的entires并重复。 (所以有点像队列) 注意,在script1.sh的末尾有一个命令,它将从SQlite DB中删除它的条目。

所以基本上我希望每次脚本完成一个script1.sh脚本时脚本都会检查SQlite数据库。

到目前为止,我有:

#!/bin/bash

sqlite3 /database.db  "SELECT * FROM main ORDER BY mKey ASC LIMIT 3" | while read file
do
fileName=`echo "$file" | awk '{split($0,a,"|"); print a[2]}'`
echo "$fileName"

    #Run script
    ./script1.sh "$fileName" "$file"


done

2 个答案:

答案 0 :(得分:1)

您无需使用echoawk,Bash可以为您做到这一点:

saveIFS=$IFS
IFS='|'
fileName=(${file})        # make an array
fileName=${fileName[2]}   # get an element
IFS=$saveIFS              # put it back like you found it

顺便说一下,你错过了“done”。

答案 1 :(得分:1)

#!/bin/bash

key=0
while :; do
  sqlite3 -column ./test.db \
   "SELECT * FROM main WHERE mKey > $key ORDER BY mKey ASC LIMIT 3" > tmpFile
  lastKey=$key
  while read k f; do
      key=$k
      echo start script1 on $f here current key is $k
  done < tmpFile
  [ $key -eq $lastKey ] && sleep 1
done

我不确定你真的想要最新的3,因为你还说你想要一个队列,所以我每次都得到 next 3,从第一个开始。