
これは私の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
コマンドがないため、expr
Korn シェルスクリプトで使用する場合は外部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 ))
追加読書
- KornShell 93 のマニュアルページ。 2012年6月19日。 AT&T。
- Bill RosenblattとArnold Robbins(2002年4月)。 」6.2。数値変数と算術」。 Korn Shellを学ぶ。オライリー2版。 ISBN 0-596-00195-9
答え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
。