Estou tentando executar uma consulta sqlite3 em um banco de dados pequeno para atualizar uma tabela. Enquanto o script é mais complicado, para testar, eu defino as seguintes variáveis:
DN=123
UP=123
downlocalip=10.1.2.3
downremoteip=123
uplocalip=123
upremoteip=123
Eu então executo o seguinte comando para atualizar a tabela.
sqlite3 /var/www/server/newserverstats.db "UPDATE stats SET downspeed='''$DN''', upspeed='''$UP''', downlocalip='''$downlocalip''', downremoteip='''$downremoteip''', uplocalip='''$uplocalip''', upremoteip='''$upremoteip''' WHERE primkey=1"
Isso gera um erro de sintaxe:
Error: near ".2": syntax error
Se eu definir o downlocalip como 10.1 somente, ele funcionará bem, por isso não está gostando dos decimais adicionais.
Na tabela em si eu tenho o tipo definido como texto, então eu não acho que isso importaria?
Saída de tabela do Pragma:
0|primkey|integer|0||1
1|downspeed|integer|1||0
2|upspeed|integer|1||0
3|downlocalip|text|1||0
4|downremoteip|text|1||0
5|uplocalip|text|1||0
6|upremoteip|text|1||0
Eu tentei todos os tipos de configurações de aspas, mas não consigo ver o que estou fazendo de errado.
Alguma idéia?
EDITAR:
Os comandos completos que tentei, conforme comentários abaixo, são:
/usr/bin/ssh [email protected] 'sqlite3 /var/www/server/newserverstats.db "UPDATE stats SET downspeed=$DN, upspeed=$UP, downlocalip="$downlocalip", downremoteip="$downremoteip", uplocalip="$uplocalip", upremoteip="$upremoteip" WHERE primkey=1"'
ou
/usr/bin/ssh [email protected] 'sqlite3 /var/www/server/newserverstats.db "UPDATE stats SET downspeed=$DN, upspeed=$UP, downlocalip='$downlocalip', downremoteip='$downremoteip', uplocalip='$uplocalip', upremoteip='$upremoteip' WHERE primkey=1;"'
ambos me deram o seguinte erro:
Error: near ",": syntax error
Novo comando, mais próximo:
ssh [email protected] sqlite3 /var/www/server/newserverstats.db <<END_SQL
UPDATE stats
SET downspeed=$DN,
upspeed=$UP,
downlocalip="$downlocalip",
downremoteip="$downremoteip",
uplocalip="$uplocalip",
upremoteip="$upremoteip"
WHERE primkey=1
END_SQL
Recolhendo de volta para uma única linha em um script de teste:
#!/bin/bash -x
DN=123
UP=123
downlocalip=10.1.2.3
downremoteip=123
uplocalip=123
upremoteip=123
sql="UPDATE stats SET downspeed=$DN, upspeed=$UP, downlocalip="$downlocalip", downremoteip="$downremoteip", uplocalip="$uplocalip", upremoteip="$upremoteip" WHERE primkey=1"
echo $sql
ssh [email protected] sqlite3 /var/www/server/newserverstats.db "$sql"
Isso me dá a resposta de:
UPDATE stats SET downspeed=123, upspeed=123, downlocalip=10.1.2.3, downremoteip=123, uplocalip=123, upremoteip=123 WHERE primkey=1
sqlite3: Error: too many options: "stats"
Use -help for a list of options.