Suite

Exportation du script shell ogr2ogr

Exportation du script shell ogr2ogr


J'écris un script simple pour exporter les données postgis vers geojson. La commande ogr2ogr fonctionne bien, mais j'ai des problèmes lorsque je passe les paramètres.

#!/bin/bash echo 'enter country code' read export echo 'exporting data from $export' ogr2ogr -f GeoJSON export.geojson PG:'dbname=alamedaok user=postgres host=localhost' -sql "SELECT id_alameda, pais, geom FROM poblaciones_def WHERE pais = '$export'"

Le problème vient dans leO pais = **$exporter"**Je ne sais pas comment "insérer" la variable dans la phrase sql. J'ai essayé avec '$' et avec ', sans succès.

De l'aide?


Bash est particulier sur les caractères de citation','et". Utilisez des guillemets doubles pour substituer la variable dans une chaîne comme"merveilleux $VAR". Aussi avec Bash, la convention est que les variables sont en majuscules, et j'éviterais d'utiliserexportationcomme nom de variable puisqu'il s'agit d'une commande pour les variables d'environnement. Considérez ces changements :

#!/bin/bash read -p "entrez le code du pays : " CODE echo "exporter les données de $CODE" SRC="PG:'dbname=alamedaok user=postgres host=localhost'" SQL="SELECT id_alameda, pais, geom FROM poblaciones_def WHERE pais=$CODE" ogr2ogr -f GeoJSON code_$CODE.geojson $SRC -sql $SQL

Vous pouvez également préfixer la dernière commande avecéchopour voir ce qu'il utilise s'il doit être débogué.


Essayez ce qui suit :

#!/bin/bash read -p 'Entrez le code du pays : ' EXP echo "exporter les données de $EXP" echo ogr2ogr -f GeoJSON export.geojson PG:'dbname=alamedaok user=postgres host=localhost' -sql "SELECT id_alameda , pais, geom FROM poblaciones_def WHERE pais = '$EXP'"

Remarques:

  • lisutilise le paramètre -p pour définir l'invite
  • Vous avez utilisé des guillemets (") dans votre chaîne SQL pour inclure la variable, ce que bash a interprété comme une substitution de commande. Utilisez des guillemets simples à la place (").
  • Les guillemets simples (") fonctionnent de la même manière que les guillemets doubles, mais ne permettent pas de référencer des variables, car la signification spéciale de $ est désactivée (ref). Les guillemets simples dans la chaîne SQL ne sont pas traités comme des guillemets car ils font partie de la chaîne entre guillemets doubles.