我正在尝试编写一个脚本,该脚本将告诉用户三角形是等腰,等边还是斜角。错误发生在第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,我想保持它整洁。谢谢大家!
答案 0 :(得分:-1)
似乎您认为外壳中的方括号就像C风格编程语言中的括号一样。那不是他们的工作方式。 [
是test
命令的同义词,它引入的条件以]
结尾。 [[
是一个特殊的令牌,引入了一个条件表达式,以]]
结尾。您无法将它们混在一起,也不能添加其他括号,例如[[[
,并且它们不会嵌套。
shell中的分组运算符为{ ... }
和( ... )
;后者还会创建一个子外壳。
elif ( [[ $x -eq $y ]] && [[ $y != $z ]] ) || ( [[ $x -eq $z ]] && [[ $z != $y ]] ) || ( [[ $y -eq $z ]] && [[ $z != $x ]] )