bash脚本如果是elif语句

时间:2016-03-18 07:15:26

标签: bash shell

运行脚本时不断出现此错误,不确定出现了什么问题,这是elif with或condition statement

第xx行:((:WEST - 非常大= EAST - BIG:表达式中的语法错误(错误标记为“WEST - Very Big”)

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

1 个答案:

答案 0 :(得分:2)

几个问题。 (( ))内的相等性检查是==(单个=是一项任务)。这在许多语言中都很常见。

变量名中不允许有空格(假设它们是变量名)。变量名中允许的字符是ASCII字母数字或下划线,第一个字符不能是数字。

将所有大写字母用于您自己的变量名称也是一个坏主意。 shell自己设置并使用大量的UPPERCASE变量,你可以踩踏彼此的值。

以下是我的代码测试版:

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