尝试运行bash脚本,有些事情正常,我收到此消息:
line 34: unexpected EOF while looking for matching `)'
这里是代码,我已经标记了相关的行(在斜边方法中):
#!/bin/bash
# Bash Script Calculator
# -----------------------------------------------------
#
#
#
# -----------------------------------------------------
a=$1
op="$2"
b=$3
if [ $# -lt 3 ]
then
echo "$0 num1 opr num2"
echo "Operators: +,-,x,/"
exit 1
fi
case "$op" in
+) echo $(( $a + $b ));;
-) echo $(( $a - $b ));;
x) echo $(( $a * $b ));;
/) echo $(( $a / $b ));;
hyp) hypotenuse;;
area) area;;
*) echo "Error: Not a listed operator"
echo "If using multiplication, use "x"";;
esac
hypotenuse()
{
hyp=$(bc -l << EOF #LINE 34
scale = 9
sqrt ( $1 * $1 + $3 * $3 )
EOF
)
echo "$hyp"
}
area()
{
area=$(echo "scale=2;3.14 * ($a * $a)" | bc)
echo "$area"
}
我错过了什么吗?我花了一点时间在谷歌上查看事情,似乎没有什么可以告诉我的。
感谢您的帮助!
答案 0 :(得分:9)
您的heredoc终结符错误:
{
hyp=$(bc -l << EOF #LINE 34
scale = 9
sqrt ( $1 * $1 + $3 * $3 )
EOF
^^^^---these spaces count
你的终结者现在实际上是[space][space][space][space]EOF
,而bash正在寻找没有空格的EOF
。终结符必须从行的开头开始,在它之前(或之后)没有任何空格。
由于你的heredoc永远不会终止,所以bash会在脚本的末尾运行,寻找永远不会来的)
,因为heredoc消耗了你实际拥有的那个。