条件语句中的Bash语法错误

时间:2019-03-10 05:54:45

标签: bash

我正在尝试编写一个脚本,该脚本将告诉用户三角形是等腰,等边还是斜角。错误发生在第7行(省略号行)

#!/bin/bash
read -p "Enter a number: " x
read -p "Enter a number: " y
read -p "Enter a number: " z
let "a = x + y + z"
if [ $x -eq $y ] && [ $y -eq $z ]
then echo "EQUILATERAL"
elif [[[ $x -eq $y ] && [ $y != $z ]] || [[ $x -eq $z ] && [ $z != $y ]] || [[ $y -eq $z ] && [ $z != $x ]]]
then echo "ISOSCELES"
elif [ $a -gt 1000 ]
then echo "Cannot equal more than 1000"
fi

我确实意识到我可以用多条elif行做同样的事情,但是我也有另一个elif,我想保持它整洁。谢谢大家!

1 个答案:

答案 0 :(得分:-1)

似乎您认为外壳中的方括号就像C风格编程语言中的括号一样。那不是他们的工作方式。 [test命令的同义词,它引入的条件以]结尾。 [[是一个特殊的令牌,引入了一个条件表达式,以]]结尾。您无法将它们混在一起,也不能添加其他括号,例如[[[,并且它们不会嵌套。

shell中的分组运算符为{ ... }( ... );后者还会创建一个子外壳。

elif ( [[ $x -eq $y ]] && [[ $y != $z ]] ) || ( [[ $x -eq $z ]] && [[ $z != $y ]] ) || ( [[ $y -eq $z ]] && [[ $z != $x ]] )