2017-02-21 3 views
0

Я пытаюсь запустить скрипт оболочки:Shell Script - Неожиданный маркер `тогда»

#!/bin/bash 
if [[ -z "$KAFKA_BROKER_ID" ]]; then 
    export KAFKA_BROKER_ID=$KAFKA_ADVERTISED_PORT 
fi 
if [[ -z "$KAFKA_LOG_DIRS" ]]; then 
    export KAFKA_LOG_DIRS="/kafka/kafka-logs-$KAFKA_BROKER_ID" 
fi 
if [[ -n "$KAFKA_HEAP_OPTS" ]]; then 
    sed -r -i "s/(export KAFKA_HEAP_OPTS)=\"(.*)\"/\1=\"$KAFKA_HEAP_OPTS\"/g" $KAFKA_HOME/bin/kafka-server-start.sh 
    unset KAFKA_HEAP_OPTS 
fi 

for VAR in `env` 
do 
  if [[ $VAR =~ ^KAFKA_ && ! $VAR =~ ^KAFKA_HOME ]]; then 
    kafka_name=`echo "$VAR" | sed -r "s/KAFKA_(.*)=.*/\1/g" | tr '[:upper:]' '[:lower:]' | tr _ .` 
    env_var=`echo "$VAR" | sed -r "s/(.*)=.*/\1/g"` 
    if egrep -q "(^|^#)$kafka_name=" $KAFKA_HOME/config/server.properties; then 
      sed -r -i "[email protected](^|^#)($kafka_name)=(.*)@\2=${!env_var}@g" $KAFKA_HOME/config/server.properties 
    else 
      echo "$kafka_name=${!env_var}" >> $KAFKA_HOME/config/server.properties 
    fi 
  fi 
done 

#$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties 

Я попробовал следующее:

  • Пробовал Изменение #/бен/Баш на! #!/bin/ш
  • Пробовал выполнения файла с ./file.sh, ш file.sh и Баш file.sh
  • Пробовал отступа кода

Но продолжать получать ту же ошибку:

start-kafka.sh: line 15: syntax error near unexpected token `then' 
start-kafka.sh: line 15: `  if [[ $VAR =~ ^KAFKA_ && ! $VAR =~ ^KAFKA_HOME ]]; then' 

И видел подобные вопросы, но не могут найти решение этой проблемы.

+6

Пожалуйста, отредактируйте свой код, чтобы уменьшить его до [mcve] вашей проблемы. Ваш текущий код включает в себя многое, что является периферийным для вашей проблемы - минимальный образец обычно похож на хороший модульный тест: выполняется только одна задача с входными значениями, указанными для воспроизводимости. Тем не менее, когда я заменяю команды безобидными (например, с помощью префикса «echo»), я не получаю синтаксическую ошибку из кода в вопросе. Возможно, что-то особенное для ценностей в вашей среде? –

+0

Вы используете это на linux bash? –

+0

@avihoo - теги предложили бы так. –

ответ

0

Это сработало наконец. Ошибок в коде не было. Как Toby Speight сказал, я переписал весь код по строкам, префикс echo, чтобы найти любые синтаксические ошибки.

Но, проверяя 20-ю строку, где еще присутствует, у меня есть некоторая ошибка. Но, в конце концов, она была решена.

Посмотрел, как будто это была проблема с еще, принадлежащих к которому если заявление (строка 18 или строка 15). Я предполагаю, что для таких проблем с отступами использование IDE было бы хорошим выбором.

-2

в этой строке:

if egrep -q "(^|^#)$kafka_name=" $KAFKA_HOME/config/server.properties; then 

отсутствуют скобки []

Может быть, это может решить вашу проблему.

+1

'if' не требует скобок, он выполняет команду и оценивает код возврата.Скобки - это всего лишь короткая форма написания теста, '' '' обычно представляет собой оболочку или символическую ссылку '/ usr/bin/[->/usr/bin/test' – mata

Смежные вопросы