синтаксическая ошибка рядом с неожиданным токеном `else 'как разрешить - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь выяснить, что не так с этим скриптом:

  1 #! /bin/sh
  2
  3 METH1=$(ip=$(ifconfig eth0 | awk '$1 == "inet" {print $2}'):7001; echo $ip)
  4 METH2=$(echo $(find /u01/ -name config.xml |grep -v bak| xargs grep -A4 AdminServer | grep listen-address | cut -d'>' -f 2 | cut -d'<' -f 1))
  5
  6 PATH=$(find /u01/oracle/config/ -wholename */AdminServer)
  7
  8 if [ "$PATH" ] = 0; then
  9         if [ "$METH1" ] = 0; then
 10                 echo $METH1
 11         elif [ "$METH2" ] = 0
 12                 echo $METH2
 13         else
 14                 exit()
 15 else
 16         if [ "$METH2" ] = 0; then
 17                 echo $METH2
 18         else
 19                 exit()
 20 fi

, который генерирует эту ошибку:

./adminurl.sh: line 13: syntax error near unexpected token `else'
./adminurl.sh: line 13: `       else'

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Вы упускаете пару вещей в своих if-elif-else заявлениях. Первое, что нужно отметить, это то, что после каждого elif вам нужно then. После этого ваши внутренние операторы if-else должны быть закрыты своими собственными fi. Наконец, удалите скобки из вызовов для выхода, они не нужны.

Ваш код будет выглядеть следующим образом:

#!/bin/sh

METH1=$(ip=$(ifconfig eth0 | awk '$1 == "inet" {print $2}'):7001; echo $ip)
METH2=$(echo $(find /u01/ -name config.xml |grep -v bak| xargs grep -A4 AdminServer | grep listen-address | cut -d'>' -f 2 | cut -d'<' -f 1))

PATH=$(find /u01/oracle/config/ -wholename */AdminServer)

if [ "$PATH" ] = 0; then
  if [ "$METH1" ] = 0; then
     echo $METH1
  elif [ "$METH2" ] = 0; then
     echo $METH2
  else
    exit
  fi
else
  if [ "$METH2" ] = 0; then
    echo $METH2
  else
    exit
  fi
fi

Примечание: Вы также используя sh вместо bash. Если вы действительно хотите использовать bash, рассмотрите возможность изменения строки хэш-банга с #!/bin/sh на #!/bin/bash.

0 голосов
/ 29 января 2020

После оператора "elif" вам нужно другое ключевое слово "then"

строка 11:

elif [ "$METH2" ] = 0
then 
    echo $METH2
...