У меня есть следующий сценарий оболочки (myscript.sh) для обработки нескольких .grb файлов для преобразования в .nc (netCDF) формата. Я поместил это в ту же папку, где .grb файлы расположены и выполнили "myscript.sh" как ниже.
Список .grb файлов в папке "Binary" похож ниже:
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'
Кто-то может помочь мне исправить это?
Любая справка ценится.
Спасибо,
Ваш цикл пропускает a do
и Ваши переменные пропускают свое разыменование $
:
#!/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
файлы в каталоге было бы более просто использовать a *
подстановочный знак, и происходит nc
имя файла от .grb
один путем удаления и замены его расширения
#!/bin/bash
for file in *.grb
do
cdo -f nc copy "$file" "${file%.grb}.nc"
done
Кроме того, это - лучшая практика, чтобы сделать исполняемый файл сценария и просто позвать его по имени
chmod +x myscript.sh
затем
./myscript.sh