2016-03-18 93 views
0

保持当我运行该脚本收到此错误,不知道哪里出了问题,这是如果elif的有或条件语句bash脚本,如果elif的语句

xx线:((:WEST - 非常大=东 - BIG :在表达式语法错误(错误标记为“WEST - 非常大”)

echo "$yn" 

if (($yn=EAST - BIG)) || (($yn=EAST - SMALL)) 
    then 
echo "---------------------------------------------------------------------------" >> /tmp/"$HOSTNAME".log 
elif (($yn=WEST - Very Big)) || (($yn=WEST - Very Small)) 
    then 
echo "---------------------------------------------------------------------------" >> /tmp/"$HOSTNAME".log 
else 
echo "---------------------------------------------------------------------------" >> /tmp/"$HOSTNAME".log 
    fi 
+0

是西方的和非常大的变量吗?如果是,请尝试:1.删除空格,2. $ WEST - $ VERY_BIG?下一次发布脚本的所有重要部分。 – Benutzer193

+0

你在哪里设置'yn'变量? – Inian

+0

$ yn可能是东部 - 大,东 - 小,西 - 非常大,西 - 非常小 – Francis

回答

2

几个问题里面(())争取平等的检查是==(单=是分配)这是常见的许多语言。

你是不允许的espace在一个变量名里面(假设它们是变量名)。变量名称中允许使用的字符是ASCII字母数字或下划线,并且第一个字符不能是数字。

使用所有大写字母作为自己的变量名也是一个坏主意。 shell自己设置和使用大量的大写变量,并且可以跺脚对方的值。

这里是你的代码我的测试版本:

yn=42 
EAST=52 
BIG=100 
WEST=45 
Very_Big=3 
Very_Small=1 
HOSTNAME='fred' 

# Here I used a variable to avoid repeating myself 
# that makes it easier to change the filename later 
outfile="/tmp/$HOSTNAME.log" 
> "$outfile" # Zero the file 

echo "$yn" 

if (($yn == EAST - BIG)) || (($yn == EAST - SMALL)) 
then 
    echo "---------------------------------------------------------------------------" >> "$outfile" 
elif (($yn == WEST - Very_Big)) || (($yn == WEST - Very_Small)) 
then 
    echo "---------------------------------------------------------------------------" >> "$outfile" 
else 
    echo "---------------------------------------------------------------------------" >> "$outfile" 
fi 

代码更容易当你使用一致缩进来阅读。要跟踪bash程序的运行方式,请使用-x,例如:

bash -x myscript 
+0

change = to ==并删除空间后,我不再收到错误,但是如果$ yn值改变,但它总是匹配第一个条件,如果(($ yn == EAST - BIG))|| (($ YN == EAST - 小)) 我-x命令得到下面的输出 +呼应WEST运行 - Very_Big WEST - Very_Big +((WEST - Very_Big == EAST - BIG)) – Francis

+0

@Francis:我不知道你在做什么,所以我不能为你调试逻辑问题。如果您对您正在尝试解决的问题进行了一些描述,那么我可能会提供帮助。 – cdarke

+0

$ yn是一个变量,它具有很多值EAST - BIG,EAST - SMALL,WEST - 非常大,WEST - 非常小等等,如果测试变量等于EAST - BIG或等于EAST - SMALL运行此elif变量相等WEST - 非常大或WEST - 非常小运行此,其余运行最后其他条件。现在的问题是无论什么$ yn值只能匹配第一个测试EAST - BIG或者等于EAST - SMALL – Francis