使用 Cygwin 的 Shell 脚本错误

使用 Cygwin 的 Shell 脚本错误

执行如下 shell 脚本后出现此错误。

$ ./script_test.sh
./script_test.sh: line 3: syntax error near unexpected token `$'do\r''
'/script_test.sh: line 3: `for ((j=0; j<"$N"; j++)) ; do

下面的脚本

#!/bin/sh

# This script will launch 10 simulations for each value of the PARAM1_LIST.
# Simulations results will be stored in folders named "myTest-i-j", where i
# is the effective value of the PARAM1_LIST for each simulation and j
# is the 1 to 10 repetition for each i.

N=10
PARAM1_LIST=(1 2 5 10)

for (( j = 0 ; j < $N; j++ )); do
for i in ${PARAM1_LIST[@]}; do
java -jar N3Sim.jar myConfigFile.cfg myTest-${i}-${j} $i
done
done

答案1

您的脚本包含 DOS 换行符,CR LF而不是 Unix 换行符LF$'\r'是控制字符的 bash 转义序列CR,通常不应包含在 Unix 文本文件中。 它位于第 3 行的末尾,现在是第 11 行,因为您可能稍后添加了 shebang 序列和注释。

解决方案是转换换行符:

dos2unix script_test.sh

还请注意,该脚本使用数组的 ba​​sh 构造,并且 shebang 应该是#!/bin/bash

答案2

您正在使用 bash 功能,但使用的是 sh 解释器。将 shebang 行更改为#!/bin/bash

分解:

$ /bin/sh
$ i=1
$ ((i++))
/bin/sh: i++: not found

答案3

另一种可能的解决方案是使用unix文本编辑器vi:

在 vi 中打开文件,使用vi filename.sh命令编辑;

输入 vi:set ff=unix命令;

使用保存文件:wq

它将使用 unix 行尾保存文件。

相关内容