当有人添加文件名和目录时,我有一个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
答案 0 :(得分:1)
您无需使用echo
和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
”。
答案 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,从第一个开始。