通过迭代执行命令的 Shell 脚本

通过迭代执行命令的 Shell 脚本

这是一个在文件夹中查找.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

您需要使用双引号来让 shell 像${DBUSER}内部一样扩展变量。

注意for i in *.tab而不是for i in $(ls *.tab).不解析输出ls,它所做的只是用空格和其他特殊字符来破坏文件名。

相关内容