2012-07-13 3 views
0

Scénario: J'essaie un petit programme de script shell.Shell scripting et sqlite3

Dans ce programme, j'essaie d'interroger une base de données avec 2 tables. et essayant d'obtenir une réponse oui ou non.

Le etag = md5sum que je récupère du fichier en utilisant un script python.

echo 'select a.hash,b.hashuser, case when a.hash=b.hashuser then "No!" else "yes!" end from tempo b, hashes a where a.hash=b.hashuser and b.hashuser='$etag'' 

Lorsque je tente d'imprimer sur mon écran, il montre clairement que ETAG comme md5sum

Mais, si je tente de l'interroger sur ma base de données et essayer de chercher le résultat. en utilisant le script donné ci-dessous

sqlite3 hashez.db 'select a.hash,b.hashuser, case when a.hash=b.hashuser then "No!" else "yes!" end from tempo b, hashes a where a.hash=b.hashuser and b.hashuser='$etag'' 

Ceci est l'erreur que je reçois.

Error: unrecognized token: "579f0b61cf958a0eea2f60906e6a04a4" 

Après googler un peu, ce la solution que je trouve de ce link

Puis je l'ai changé pour ${#etag}

echo 'select a.hash,b.hashuser, case when a.hash=b.hashuser then "No!" else "yes!" end from tempo b, hashes a where a.hash=b.hashuser and b.hashuser='${#etag}'' 

L'erreur que je reçois est maintenant

select a.hash,b.hashuser, case when a.hash=b.hashuser then "No!" else "yes!" end from tempo b, hashes a where a.hash=b.hashuser and **b.hashuser=32** 

Pourquoi b.hashuser = 32. est ma première question.

Deuxième problème:

Lorsque je tente d'interroger la base de données en utilisant la fonction ci-dessus:

sqlite3 hashez.db 'select a.hash,b.hashuser, case when a.hash=b.hashuser then "No!" else "yes!" end from tempo b, hashes a where a.hash=b.hashuser and b.hashuser='${#etag}'' 

Je suis pas de réponse de retour.

  • Ma requête est erronée. , Si oui, pourquoi ai-je une réponse lorsque je l'interroge directement dans la base de données?

Désolé pour mon mauvais anglais

Répondre

1

Vous paresser sur vos citations.

somecmd 'SELECT ... "'"$etag"'", ...' 

Notez les guillemets dans les guillemets simples, ainsi que la substitution de paramètres.

+0

Merci pour votre réponse. Ça marche! Juste une question de plus. Si je comprends bien - "$ blah" -> le lancera en tant que personnage. Mais '$ blah' va lui donner la valeur dans la variable Ai-je raison? – user1524529

+0

Non. Les guillemets simples empêchent la substitution de paramètres. C'est pourquoi vous les fermez d'abord, puis vous ouvrez des guillemets doubles, puis vous effectuez un retour après. –

+0

Ah, je vois! Merci! – user1524529