繰り返しコマンドを実行するシェルスクリプト

繰り返しコマンドを実行するシェルスクリプト

これはフォルダ内のファイルを.tab見つけてそれを使用してインポートするようになっていますが、ogr2ogr正しいサポートのために失敗するスクリプトです。

for i in $( ls *.tab )
do
  echo item: $i

  ogr2ogr -f PostgreSQL -s_srs EPSG:21781 -t_srs EPSG:4326 -overwrite \
          -nln $TBL_NAME PG:'"host=localhost user='$DBUSER' dbname='$DBNAME'"' $i
done

ogr2ogrこの部分をこのように実行するにはコマンドラインが必要です。

ogr2ogr -f "PostgreSQL" -s_srs "EPSG:21781" -t_srs "EPSG:4326" -overwrite \
        -nln "geom_tour" PG:"host=localhost user=postgres dbname=gis" DMC_34093.tab 

答え1

しなければならない:

for i in *.tab
do
  echo item: $i

  ogr2ogr -f "PostgreSQL" -s_srs "EPSG:21781" -t_srs "EPSG:4326" -overwrite -nln "$TBL_NAME" PG:"host=localhost user=\'${DBUSER}\' dbname=\'${DBNAME}\'" "$i"
done

シェルが内部的に変数を拡張できるようにするには、二重引用符を使用する必要があります${DBUSER}

for i in *.tab代わりに注意してくださいfor i in $(ls *.tab)出力を解析しません。ls、ファイル名が空白などの特殊文字で混乱するだけです。

関連情報