在寻找匹配的`)时出现意外的EOF错误。

时间:2014-08-15 16:07:30

标签: bash

尝试运行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"
}

我错过了什么吗?我花了一点时间在谷歌上查看事情,似乎没有什么可以告诉我的。

感谢您的帮助!

1 个答案:

答案 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消耗了你实际拥有的那个。