1

当有人向其中添加文件名和目录时,我有一个 SQlite 数据库被填充,然后我希望脚本读取最新的 3 个条目(使用“LIMIT 3”完成)然后我希望这个脚本获取这 3 个条目并开始他们每个人的“script1.sh”,然后一旦 script1 完成了 3 个中的一个,我希望它回顾 SQlite 数据库并检查是否有任何新的整体并重复。(有点像队列) 注意,在 script1.sh 的末尾有一个命令会从 SQlite DB 中删除它的条目。

所以基本上我希望脚本在每次一个 script1.sh 脚本完成时检查 SQlite DB。

到目前为止,我有:

#!/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
4

2 回答 2

1

你不需要使用echoand awk,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”。

于 2009-09-27T02:33:27.807 回答
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 个,因为你还说你想要一个队列,所以我每次都得到下一个3,从第一个开始。

于 2009-09-27T03:24:47.080 回答