意外标记附近的语法错误`do

Fly*_*out 1 shell scripting shell-script syntax

我在 .sh 中使用 for 循环时出现“接近意外标记‘do’的语法错误”错误。这是代码:

#!/bin/sh

# some code

for flux in $(ls -d /home/eai/*/*/*) ; do
  FICHIER=$(ls -p -tr $flux | grep -v / | head -n 1)
  if [[ $FICHIER ]] ; then
     # some code
  fi
done
Run Code Online (Sandbox Code Playgroud)

执行脚本的不同方式,以及输出:

1) sh script.sh 或 bash script.sh

'cript_1409.sh: line 24: syntax error near unexpected token `do
'cript_1409.sh: line 24: `for flux in $(ls -d /home/eai/*/*/*); do
Run Code Online (Sandbox Code Playgroud)

2) ./script.sh

-bash: ./script_1409.sh: /bin/sh^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我试过的:

1) 对循环使用不同的语法。

for flux in $(ls -d /home/eai/*/*/*) ; do
  FICHIER=$(ls -p -tr $flux | grep -v / | head -n 1)
  if [[ $FICHIER ]] ; then
     # some code
  fi
) &
done
Run Code Online (Sandbox Code Playgroud)

或者

for flux in $(ls -d /home/eai/*/*/*)
do
  FICHIER=$(ls -p -tr $flux | grep -v / | head -n 1)
    if [[ $FICHIER ]] ; then
      # some code
    fi
done
Run Code Online (Sandbox Code Playgroud)

2) 将#!/bin/sh 更改为#!/bin/bash。

3) 将扩展名 .sh 更改为 .bash 并重试上述所有执行命令。

Ric*_*ann 5

您的脚本已DOS编码并且sh/bash不喜欢这样。安装dos2unix并运行

dos2unix <script>
Run Code Online (Sandbox Code Playgroud)

在你的脚本上。并再次运行它。