最初の3のためのループSQLite3のデータベース継続的に、クエリが見つかった実行スクリプト

StackOverflow https://stackoverflow.com/questions/1482603

質問

誰かがそれにファイル名とディレクトリを追加し、これまで、私はスクリプトが(「LIMIT 3」で行う)最新の3つの項目を読みたいとき

私はSQLiteのデータベースは、私は、このスクリプトは、これらの3を取りたい埋めますしていますエントリおよびそれらのそれぞれについて、「script1.sh」を起動し、[SCRIPT1は3の1を終えた後、私はそれがSQLiteデータベースに振り返ると、新しいのentiresと繰り返しがあるかどうかを確認します。 (そうちょっとキューなど) NOTEは、script1.shの終わりに、それはSQLiteのDBからのエントリの削除するコマンドがあります。

だから、基本的に私は、スクリプトがSQLiteのDBを一のscript1.shスクリプトが終了するたびにチェックしたい。

これまでのところ、私は持っています:

#!/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
役に立ちましたか?

解決

#!/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が欲しかっ確認されませんでした

他のヒント

あなたはechoawkを使用する必要はありません、バッシュはあなたのためにそれを行うことができます:

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

あなたは道で、 "doneを" 欠落している。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top