数値の合計を値で割りたいです。

数値の合計を値で割りたいです。

これは私のUnixシェルスクリプトコードです。

#! /bin/ksh

echo "Enter your first number:"    
read first

echo "Enter your second number:"    
read second

echo "Enter your third number:"    
read third

SUM=`expr $first + $second + $third`    
AVERAGE="$SUM/3"

echo "The average is $AVERAGE"

基本的に、ユーザーが入力した3つの値の平均を求めたいと思います。すべての値を入力した後の結果(たとえば、すべての値の合計が12になる)は、「平均は12/3です」。

答え1

ここでslmの答えは、Bourne AgainシェルではなくKornシェルについて質問したことを考慮していませんでした。 (93) Korn シェルには組み込みexprコマンドがないため、exprKorn シェルスクリプトで使用する場合は外部exprコマンドを使用します。これ自体は問題になりません。結局のところ、これはBourneシェルを使って作業を実行する方法であり、Bourneシェルには組み込みexprコマンドはありません。しかし、M. Kohenが指摘したように、人々はシェルに組み込み機能があるときに組み込み機能を使用することを好むかもしれません。 Kornシェルにもあります。

M. Kohen氏が指摘した。算術置換Korn シェルで使用できます。これを覚えておくことが大切ですはい代替であるため、コマンドで実行したくない場合は、代替結果として何かをする必要があります。 M. Kohenの答え(演算子優先順位エラーの修正)のより完全な形式は次のとおりです。

AVERAGE="$(( (first + second + third) / 3))"

しかし、Kornシェルでこれを達成するには2つの異なる方法があります。 Kornシェルには、次letの組み込みコマンドがあります。算術評価それに関するすべての主張は次のとおりです。

let "AVERAGE = (first + second + third) / 3"

コマンドの各引数は式なので、ここのようにスペースを引用する必要があります。

また、kshレプリケーションマニュアルに「syntactic sugar let」と記載されている構文があります。ここで、式はコマンドの単一引数になります。

(( AVERAGE = (first + second + third) / 3 ))

追加読書

答え2

ドル記号の前に二重括弧を使用して、シェルに組み込まれた算術サポートを使用できます。

$(( (first + second + third) / 3))

exprこれは、別のプロセス(したがってフォーク、実行、パイプ管理、および戻り)を必要としないよりも効率的です。

答え3

お客様の質問には、もともとKorn Shellタグがないため、後で追加しました。 Bashを使用している場合は、次のものが適用されます。


このコマンドはexprさまざまな数学計算を実行できます。平均化を実行するために使用します。

$ AVG=$(expr $SUM / 3)

$(...cmd...)また、通常、バックティックの代わりにこのサブコマンド形式を使用することをお勧めします。したがって、SUM=行を次のように変更します。

SUM=$(expr $first + $second + $third)

特定のコマンドが何ができるかわからない場合は、マニュアルページを確認してください。このコマンドには、expr実行できるすべての操作が含まれていますman expr

引用する

関連情報