比较目录和数组

时间:2018-06-05 23:32:27

标签: bash

我试图根据目录中文件的名称创建一个运行两个不同命令的脚本。

到目前为止,我创建了这个小脚本:

#!/bin/bash

declare -a sumas=("CPRAT1sfc.nc" "CPRAT2sfc.nc" "CPRATsfc.nc")

for files in *.nc; do
    if [ "$files"="${sumas[@]}" ]; then
        cdo daymean $files {$files}_d.nc
    else
        cdo daysum $files {$files}_d.nc
    fi
done

我试图获取以.nc结尾的所有文件,然后检查它们的名称是否与sumas数组中的名称不同。

对于命名相同的文件,将运行一个命令:cdo daymean input output,输出文件将与输入名称相同,但末尾有_d.nc(仍需删除输入的.nc因此不会以.nc_d.nc}结束。

如果他们的名字与sumas不同,那么将运行另一个命令,语法与前一个类似。

我虽然脚本已准备好但我收到此错误: scriptCDO.sh: 4: scriptCDO.sh: Syntax error: "(" unexpected

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

没有足够的信息,因为$ i未设置,但您的问题主要与比较方法有关。看看这个:

#!/usr/bin/env bash
BASE_DIR="/tmp/"  # change this to your base folder name
declare -a sumas=( "CPRAT1sfc.nc" "CPRAT2sfc.nc" "CPRATsfc.nc" )
i=1 # you need to set this to something

cd "${BASE_DIR}"
for each in * ; do
    if [[ "${sumas[@]}" =~ "${each}" ]] ;then
        echo "HERE -- cdo daymean $each {$i}_d.nc"
    else
        echo "NOT HERE -- cdo daysum $echo {$i}_d.nc"
    fi
done