【发布时间】:2018-06-05 23:32:27
【问题描述】:
我正在尝试根据目录中文件的名称创建一个用于运行两个不同命令的脚本。
到目前为止,我创建了这个小脚本:
#!/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
知道发生了什么吗?
【问题讨论】:
-
最直接的问题是,您正尝试使用不同语言的解释器运行 bash 脚本,特别是
sh。请改用bash,或者最好使用./yourfile来使用shebang 中指定的文件。但是,还有其他几个问题。使用 shellcheck 并首先修复这些问题,然后更新。 -
你能把
echo BASH_VERSION=$BASH_VERSION放到这个脚本里,运行它并显示它的输出吗? -
@KamilCuk 它显示 BASH_VERSION=4.4.12(1)-release
-
谢谢@thatotherguy !我对此有点陌生...在您发表评论后,我能够使用 ./scriptname 运行它,但现在我知道“如果...”行上应该有一个二元运算符。 :/ 我认为它是当前写的。
标签: bash