shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Loop de exit code


From: Kurt Kraut
Subject: Loop de exit code
Date: Fri, 31 Jul 2009 03:56:31 +0000

Olá,


Estou tentando fazer um script que insere dados em um banco de dados SQLite
a partir de um arquivo CSV, modificando alguns dados antes de inserir. Eis o
script:

----

#!/bin/dash
fonte=depois-da-perda.csv
while read linha
do
#Coletando os campos e processando o campo4
 campo1=$(echo $linha | cut -d";" -f 1)
 campo2=$(echo $linha | cut -d";" -f 2)
 campo4=$(echo $linha | cut -d";" -f 4 | tr , .)
#Processando os demais campos
 campo1=$(printf "%06d" $campo1)
 if test $campo2 -lt 0
 then
  campo2=0
 fi
#Gravando no banco de dados
sqlite3 stockbot.db <<EOF
INSERT INTO produtos (codigo, estoque, custo) VALUES ($campo1, $campo2,
$campo4);
EOF
done < $fonte

----

Ele funciona como esperado, mas há um problema. O comando sqlite3 não lida
com concurrency no banco de dados. Se outro processo estiver fazendo
consultas no banco de dados (comando SELECT em SQL), a gravação dos dados no
script supracitado falha. Então minha conversão de CSV em SQLite têm perda
de dados caso outro processo esteja consultando dados no mesmo banco de
dados.

Felizmente, quando isso acontece, o sqlite3 sai com exit code 1. Então eu
precisaria fazer um loop com o comando do sqlite3 (linhas 15, 16 e 17) que
só saísse dele quando o exit code fosse 0. Eu experimentei com bash:

until [ $? = 0 ]; do
sqlite3 stockbot.db <<EOF
INSERT INTO produtos (codigo, estoque, custo) VALUES ($campo1, $campo2,
$campo4);
EOF
done

Mas não deu certo. Alguma sugestão?

Desde já agradeço a atenção dispensada,


Kurt Kraut (address@hidden)


PS: Caso precisam experimentar, coloco abaixo 5 linhas do
depois-da-perda.csv:

16;4;;5,69
17;4;;9,67
18;3;;9,67
19;3;;9,18
20;0;;4,44


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]