zoukankan      html  css  js  c++  java
  • 将 Bash 脚本改成 Bat 脚本 转载

     https://gmt-china.org/blog/bash2bat/

    社区提供的 GMT 绘图脚本多是基于 Linux 下的 bash 脚本,有相当一部分用户并不熟悉 bash,因此有必要介绍如何将 bash 脚本改成 Windows 下可用的 bat 脚本。

    简单来说,将 bash 脚本改成 bat 脚本需要注意以下几点:

    1. 注释符号: # => rem
    2. 设置变量: PS=MAP.PS => set PS=MAP.PS
    3. 引用变量: $PS => %PS%
    4. 删除文件: rm gmt.* => del gmt.*

    使用编辑器搜索替换功能可以很方便地实现转换。 比如搜索 # 并全部替换为 rem,搜索 $PS$R$J 分别替换为 %PS%%R%%J%

    当然还有一些比较复杂的语句就需要你对 bat 脚本语言比较熟悉。

    比如 bash 下的嵌套命令可以将一条命令的结果作为变量使用:

    T1=$(gmt grdinfo world6m.grd -T1000)
    gmt makecpt -Crainbow $T1 > 1.cpt
    

      

    而在 bat 下可以用如下两种方法来实现:

    rem 方法1
    for /f %%i in ('gmt grdinfo world6m.grd -T1000') do set T1=%%i
    gmt makecpt -Crainbow %T1% > 1.cpt
    
    rem 方法2
    gmt grdinfo world6m.grd -T1000 > tmp.txt
    set /p T1=<tmp.txt
    gmt makecpt -Crainbow %T1% > 1.cpt
    

      

    再比如 bash 下可以非常方便的进行多段文本的输入

    # 被 EOF 包起来的几行文本将作为 gmt psxy 的输入
    gmt psxy -R -J -Sc0.5c -Gred -W0.5p,black -K -O << EOF >> $PS
    112.35 36.56
    113.78 42.15
    114.50 37.60
    EOF
    

      

    在 bat 下则只能将两行文本先写入到文本中,再将文本作为命令的输入

    echo 112.35 36.56 > tmp
    echo 113.78 42.15 >> tmp
    echo 114.50 37.60 >> tmp
    gmt psxy tmp -R -J -Sc0.5c -Gred -W0.5p,black -O -K >> %PS%
    

      

    最后,如果脚本中出现了 grep、cut、wc、cat 等命令,可以下载社区提供的UnixTools 工具包并解压缩到 GMT 安装路径的 bin 目录下,需要注意的是 bash 脚本中的 awk 需要更改为 gawk,同时单引号需要改为双引号。

    下面给出一个简单的 bash 脚本:

    #!bin/bash
    PS=example.ps
    # 设置经纬度范围
    R=-R108/125/33/43
    # 设置投影方式
    J=-JM6i
    # 绘制底图
    gmt psbasemap $R $J -B3 -K > $PS
    T1=$(gmt grdinfo huabei.grd -T100)
    gmt makecpt -Ctopo $T1 > huabei.cpt
    # 绘制华北地形
    gmt grdimage -R -J huabei.grd -Chuabei.cpt -K -O >> $PS
    # 绘制台站分布
    gmt psxy -R -J -St0.5c -Gblack -K -O >> $PS << EOF
    112 36
    120 40
    115 39
    EOF
    
    # 绘制 event.dat 中地震,从第二行开始提取第 4 列作为经度,提取第 3 列作为纬度
    awk '{if (NR>1) print $4,$3}' event.dat | gmt psxy -R -J -Sc0.4c -Gblack -O >> $PS
    # 删除临时文件
    rm gmt.* huabei.cpt
    

      

    按照上述方法修改成的 bat 脚本如下:

    set PS=example.ps
    rem 设置经纬度范围
    set R=-R108/125/33/43
    rem 设置投影方式
    set J=-JM6i
    rem 绘制底图
    gmt psbasemap %R% %J% -B3 -K > %PS%
    for /f %%i in ('gmt grdinfo huabei.grd -T100') do set T1=%%i
    gmt makecpt -Ctopo %T1% > huabei.cpt
    rem 绘制华北地形
    gmt grdimage -R -J huabei.grd -Chuabei.cpt -K -O >> %PS%
    rem 绘制台站分布
    echo 112 36 > tmp
    echo 120 40 >> tmp
    echo 115 39 >> tmp
    gmt psxy tmp -R -J -St0.5c -Gblack -K -O >> %PS%
    
    rem 绘制 event.dat 中地震,从第二行开始提取第 4 列作为经度,提取第 3 列作为纬度
    gawk "{if (NR>1) print $4,$3}" event.dat | gmt psxy -R -J -Sc0.4c -Gblack -O >> %PS%
    rem 删除临时文件
    del gmt.* huabei.cpt tmp
    

      

     
  • 相关阅读:
    洛谷P1072 Hankson 的趣味题(题解)
    18.3.19晚听韩明睿大佬讲题收获
    题解+新技巧--一本通1282:最大子矩阵
    题解-洛谷P1303 A*B Problem(高精)
    Java重载和覆盖
    propagation属性的7个传播行为
    脏读、不可重复读、幻读
    RSA 数据加密和数字签名算法
    大型互联网站解决高并发的常见策略
    死锁和活锁
  • 原文地址:https://www.cnblogs.com/gisalameda/p/11579799.html
Copyright © 2011-2022 走看看