试图计算BASH中圆的半径和面积

时间:2016-07-18 03:33:10

标签: linux bash shell

我正在尝试编写一个基本脚本来计算圆的半径和面积,其中PI = 3.14,并给出了圆周。我对脚本非常陌生,我似乎无法解决这个问题。

#!/bin/bash
PI=3.14
CIRC=5
RAD=echo "((CIRC/2*PI))" | bc-l
printf "Radius: %.2f" $RAD
AREA=echo "((PI*RAD**2))" | bc-l
printf "Area: %.2f" $AREA

两个方程的总和没有存储在那些变量中,我不知道为什么。我希望有人可以帮忙解释一下。

2 个答案:

答案 0 :(得分:5)

下面的脚本会这样做:

#!/bin/bash
pi=3.14
circ=5
rad=$( echo "scale=2;$circ / (2 * $pi)" | bc )
printf "Radius: %.2f\n" $rad
area=$( echo "scale=2;$pi * $rad * $rad" | bc )
printf "Area: %.2f\n" $area

备注

  1. 请参阅[ command substitution ]
  2. 永远不要在脚本中使用完整的大写变量,因为它们通常是为系统保留的,请检查[ this ]
  3. scale bc控制精度,请检查[ this ]

答案 1 :(得分:4)

  1. 由于bc可以打印字符串,因此不需要printf。也不是反叛或$(),甚至是一些变量。使用bashecho可以替换为<<<

    #!/bin/bash
    PI=3.14
    CIRC=5
    bc <<< "scale=2; r=$CIRC/(2*$PI)
            print "'"Radius: ", r, "\nArea: ", '"$PI"'*(r^2), "\n"'
    
  2. POSIX shell代码版本,使用此处文档

    #!/bin/sh
    PI=3.14
    CIRC=5
    bc << snip
          scale=2; r=$CIRC/(2*$PI)
          print "Radius: ", r, "\nArea: ", $PI * (r^2), "\n"
    snip
    
  3. bc

    #!/usr/bin/bc -q
    pi=3.14; circ=5; scale=2; r=circ/(2*pi)
    print "Radius: ", r, "\nArea: ", pi*(r^2), "\n"
    quit