我有以下 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