-3

Всякий раз, когда я выполняю этот код, я получаю ошибку синтаксиса ошибки рядом с else .

Вот код:

if [ -z $loc ] then
     if [uname -a| grep 64 >/dev/null] then
        sdir=$KALDI_ROOT/tools/srilm/bin/i686-m64
else
            sdir=$KALDI_ROOT/tools/srilm/bin/i686
      fi
      if [ -f $sdir/ngram-count ] then
            echo "Using SRILM language modelling tool from $sdir"
            export PATH=$PATH:$sdir
      else
            echo "SRILM toolkit is probably not installed.
              Instructions: tools/install_srilm.sh"
            exit 1
      fi
fi

1 ответ1

2

Я получаю ошибку синтаксиса ошибки рядом else

Вы можете использовать http://www.shellcheck.net/ для проверки вашего синтаксиса:

$ shellcheck myscript

Line 1:
if [ -z $loc ] then
               ^-- SC1010: Use semicolon or linefeed before 'then' (or quote to make it literal).

Line 2:
     if [uname -a| grep 64 >/dev/null] then
     ^-- SC1009: The mentioned parser error was in this if expression.
        ^-- SC1073: Couldn't parse this test expression.
         ^-- SC1035: You need a space after the [ and before the ].
         ^-- SC1009: Use 'if cmd; then ..' to check exit code, or 'if [[ $(cmd) == .. ]]' to check output.
                 ^-- SC1035: You are missing a required space here.
                 ^-- SC1072: Fix any mentioned problems and try again.

$ 

Исправление очевидных ошибок (отсутствует ; s и пробелы дает:

if [ -z $loc ]; then
     if [ uname -a | grep 64 >/dev/null ] then
        sdir=$KALDI_ROOT/tools/srilm/bin/i686-m64
else
            sdir=$KALDI_ROOT/tools/srilm/bin/i686
      fi
      if [ -f $sdir/ngram-count ]; then
            echo "Using SRILM language modelling tool from $sdir"
            export PATH=$PATH:$sdir
      else
            echo "SRILM toolkit is probably not installed.
              Instructions: tools/install_srilm.sh"
            exit 1
      fi
fi

А также:

$ shellcheck myscript

Line 2:
     if [ uname -a | grep 64 >/dev/null ]; then
     ^-- SC1009: The mentioned parser error was in this if expression.
        ^-- SC1073: Couldn't parse this test expression.
          ^-- SC1009: Use 'if cmd; then ..' to check exit code, or 'if [[ $(cmd) == .. ]]' to check output.
                   ^-- SC1072: Fix any mentioned problems and try again.

$ 

Вы можете исправить оставшиеся ошибки самостоятельно.


ShellCheck - инструмент статического анализа сценария оболочки

ShellCheck - это инструмент GPLv3, который выдает предупреждения и предложения для сценариев оболочки bash/sh:

Снимок экрана терминала, на котором показаны проблемные строки сценария оболочки.

Цели ShellCheck:

  • Чтобы указать и прояснить типичные проблемы синтаксиса новичка, которые заставляют оболочку выдавать загадочные сообщения об ошибках.

  • Указать и прояснить типичные семантические проблемы промежуточного уровня, которые заставляют оболочку вести себя странно и нелогично.

  • Чтобы указать на тонкие предостережения, угловые случаи и ловушки, которые могут привести к сбою в противном случае работающего сценария опытного пользователя в будущем.

Source ShellCheck

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .