J'effectue souvent une requête et je voulais écrire un script bash simple à exécuter. Lorsque je l'ai mis à courir commeFormat de script de requête donnant une fin de fichier inattendue
#!/bin/bash
dbaccess davedb <<! 2>/dev/null
set isolation dirty read;
SELECT cpe_localization_code
FROM hct_profile
WHERE hct_mac_address = '$mac';
il fonctionne mais je dois suivre pour configurer la variable dur mac $ et essaie de le mettre à lire un fichier.
Si je le structure comme ceci est il lit du fichier mais fait comme il indique et fait écho chaque fois ainsi j'obtiens un désordre sur l'écran.
#!/bin/bash
OLDIFS=$IFS
IFS="/t"
file=list.csv
while read mac; do
echo "SET isolation dirty read;
SELECT cpe_localization_code
FROM hct_profile
WHERE hct_mac_address = '$mac'
;" | dbaccess davedb
done <"$file"
IFS=$OLDIFS
Retours
Database selected.
Isolation level set.
cpe_localization_+
82345
1 row(s) retrieved.
Database closed.
Database selected.
Isolation level set.
cpe_localization_+
82345-1
1 row(s) retrieved.
Database closed.
J'ai essayé cela, mais me donne une fin de fichier inattendue.
#!/bin/bash
OLDIFS=$IFS
IFS="/t"
file=list.csv
while read mac; do
dbaccess davedb <<! 2>/dev/null
set isolation dirty read;
SELECT cpe_localization_code
FROM hct_profile
WHERE hct_mac_address = '$mac';
done <"$file"
IFS=$OLDIFS
Aide pointant vers moi dans la bonne direction pour fixer
Merci, cela a fait l'affaire! Et merci pour le lien vers la page de référence. – cw2
Il aurait été possible de conserver l'original '!' En plaçant le '!' Correspondant sur une ligne à part à la fin. J'utilise souvent 'EOF' comme marqueur pour la fin de here-doc (et parfois'! 'Ou EOS ou EOT), mais chacun pour le sien. –
Oui. Je l'ai changé pour le rendre explicite. De plus, les requêtes SQL utilisent parfois! = For not equals, et cela poserait alors problème. – Munir