將 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

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章