在 Linux 中运行 shell 脚本来处理多个 .grb 文件

在 Linux 中运行 shell 脚本来处理多个 .grb 文件

我有以下 shell 脚本 (myscript.sh),用于处理多个 .grb 文件并将其转换为 .nc (netCDF) 格式。我将其放在 .grb 文件所在的同一文件夹中,并按如下所示运行“myscript.sh”。

“Binary”文件夹中的.grb 文件列表如下:

NLDAS_VIC0125_H.A19901231.0000.002.grb
NLDAS_VIC0125_H.A19901231.0100.002.grb
.
.
NLDAS_VIC0125_H.A19901231.0500.002.grb 

~Downloads/Binary$ bash myscript.sh

#!/bin/bash
for i in 000 100 200 300 400 500
cdo -f nc copy NLDAS_VIC0125_H.A19901231.0{i}.002.grb NLDAS_VIC0125_H.A19901231.0{i}.002.nc
done

我的脚本给出了一个错误:

script.sh: line 3: syntax error near unexpected token `cdo'
script.sh: line 3: `cdo -f nc copy NLDAS_VIC0125_H.A19901231.0{i}.002.grb NLDAS_VIC0125_H.A19901231.0{i}.002.nc'

有人能帮我纠正这个问题吗?

任何帮助都将受到赞赏。

谢谢,

答案1

您的循环缺少 ado并且您的变量缺少它们的取消引用$

#!/bin/bash
for i in 000 100 200 300 400 500
do
  cdo -f nc copy NLDAS_VIC0125_H.A19901231.0${i}.002.grb NLDAS_VIC0125_H.A19901231.0${i}.002.nc
done

但是如果你想循环全部目录中的文件.grb使用通配符会更简单,然后通过删除和替换其扩展名来从文件名中*派生文件名nc.grb

#!/bin/bash
for file in *.grb
do
  cdo -f nc copy "$file" "${file%.grb}.nc"
done

此外,更好的做法是使脚本可执行,并简单地通过名称调用它

chmod +x myscript.sh

然后

./myscript.sh

相关内容