2016-07-18 11 views
4

円の半径と面積を計算するための基本的なスクリプトを書こうとしています。ここではPI = 3.14で、円周が与えられています。私はスクリプト作成に非常に新しいです、そして、私はこれを理解することができません。BASHの半径と円の面積を計算しようとしています

#!/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

非常に近いです。 '$((...))'はすべての数学的評価を行い、先行する '$'を使ってキャプチャできる出力を表示することを思い出してください変数の代入では、 'rad = $(())'となります。がんばろう。 – shellter

+0

私は小数点のためにbcをパイプしなければならないと考えました。組み込み関数は整数計算しか行いません。おもう? – remedy

+0

@shellter '(())'は浮動式を評価できないので、 'bc'のようなツールを委譲する必要があります。 ;)。 Plsチェック[\ [this \]](http://stackoverflow.com/q/12722095/1620779)と[\ [this \]](https://www.shell-tips.com/2010/06/14/perform-math-in-bash /)を実行します。 – sjsam

答えて

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. scalebcは、精度を制御します。チェックは[ this ]です。
+0

素晴らしい、情報ありがとう。どこが間違っているのか分かりますが、大文字の変数を使用しています。なぜなら、先生がそれを望んでいるからです。 XD – remedy

+2

@remedy scale小数点以下の桁数を設定します。マンページは、それがbcによってサポートされている標準的な機能だと言います。詳細については、このリンクをチェックしてください。 – sjsam

4
  1. bcは、文字列を印刷することができますので、printfのための必要はありません。バック・チックや$()、あるいはいくつかの変数でさえも。 bashで、echo<<<に置き換えることができます:

    ここ文書使用
    #!/bin/bash 
    PI=3.14 
    CIRC=5 
    bc <<< "scale=2; r=$CIRC/(2*$PI) 
         print "'"Radius: ", r, "\nArea: ", '"$PI"'*(r^2), "\n"' 
    
  2. POSIXシェルコードのバージョン、:

    #!/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 
    
+0

ここの文書では、これはどのシェルでも移植可能です。 Bashの '<<<' "here string"構文は便利ですが、簡単に回避できます。 (そして、 'bc'は特に改行を避けたいと思っていません。) – tripleee

+0

@treepleee、あなたが正しいです、' bc'はエスケープする必要はありません。 *ここに書かれた文書*以前は思っていましたが、もしそれをやろうとすれば、すべてがbcで終わるかもしれません。一定。 – agc

関連する問題