выполните сценарий оболочки в Linux для обработки нескольких .grb файлов

У меня есть следующий сценарий оболочки (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'

Кто-то может помочь мне исправить это?

Любая справка ценится.

Спасибо,

0
задан 28 June 2017 в 16:27

1 ответ

Ваш цикл пропускает 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
1
ответ дан 3 November 2019 в 00:47

Другие вопросы по тегам:

Похожие вопросы: