执行如下 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
还请注意,该脚本使用数组的 bash 构造,并且 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 行尾保存文件。