意外标记"else"附近的语法错误如何解决



我试图找出这个脚本有什么问题:

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'

任何帮助都值得赞赏。

在"elif"语句之后,你需要另一个"then"关键字

第 11 行 :

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

你在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,请考虑将 hashbang 行从#!/bin/sh更改为#!/bin/bash

最新更新