2010-12-16 4 views
1

J'ai une base de données SQLite, stuff.db (avec les notes TABLE (id INTEGER PRIMARY KEY, date d'horodatage, note TEXT);). L'horodatage est automatiquement déclenché.SQLite, script bash et opérateur de concaténation

Je veux le remplir à la manière rapide et sale à partir de la ligne de commande.

Alors, je l'ai écrit un script nommé bashscript1 qui va:

sqlite3 script.db 'insert into notes (note) values ("Stuff happens.");' 

Mais je voulais aussi garder cette phrase que l'entrée standard et le cas échéant, pour être plus précis: Je voudrais ajouter une variable des informations telles que: "Foo entre dans la pièce." ou "Bar fait un appel téléphonique". L'idée est de concaténer ces cordes et d'avoir: "Les choses arrivent, Foo entre dans la pièce." ou "Des trucs arrivent, Bar fait un appel téléphonique."

Je réécrit le script:

echo "Do you want to add somme text ?" 
read Str1 
sqlite3 script.db 'insert into notes (note) values ("Stuff happens."||\"$Str1\");' 

Et, je suis bien sûr un message d'erreur. Comment dois-je procéder?

Merci à l'avance

thg

Répondre

1

les variables Shell étendent l'habitude quand enveloppé dans les guillemets simples comme vous l'avez. Peut-être que vous voulez:

sqlite3 script.db "insert into notes (note) values (\"Stuff happens.\"||\"$Str1\");" 

P.S. Je suppose que le || fait partie de la syntaxe sqlite3 parce que ce n'est certainement pas bash, du moins pas dans ce contexte. Si ce n'est pas bien, faites le moi savoir.

+0

Je confirme que || est l'opérateur de concaténation dans sqlite. Mais comme avec sje397 je reçois un message d'erreur: Erreur: jeton non reconnu: "\" – ThG

+0

@SiegeX: Ne serait-il pas une meilleure solution pour concaténer les 2 chaînes dans bash avant de l'envoyer à sqlite? Mais je ne sais pas comment faire ça ... (même mesg à sje397) – ThG

+1

Il vaudrait mieux ne pas entrer dans l'affaire quote-soupe et faire comme ça: "sqlite3 script.db" insérer dans les notes (note) valeurs ("Stuff arrive." || "'" $ Str1 "'"); ''. Je sais que c'est un peu hypocrite d'appeler cela "pas de soupe de citation" mais c'est la méthode la plus fiable. – Sorpigal

2

Essayez:

sqlite3 script.db "insert into notes (note) values ('Stuff happens.$Str1');" 

Notez que cela cassera si votre $Str1 contient une seule citation.

+0

Merci pour votre réponse, mais je reçois dans sqlite un message d'erreur: Erreur: jeton non reconnu: "\" – ThG

+0

@ThG - édité .. – sje397

+0

désolé, je suis plutôt nouveau .. Qu'avez-vous voulu dire par Edité? J'espère que je n'ai pas oublié quelque chose.BTW, ne serait-ce pas une meilleure solution pour concaténer les 2 chaînes en bash avant de l'envoyer à sqlite? Mais je ne sais pas comment faire ça ... (same mesg to SiegeX) – ThG

Questions connexes