web-dev-qa-db-ja.com

Linuxシェルで変数を使って除算するにはどうすればよいですか。

以下のようにシェルでコマンドを実行すると、expr: non-integer argumentエラーが返されます。誰かが私にこれを説明してもらえますか?

$ x=20
$ y=5
$ expr x / y 
expr: non-integer argument
106
Judking

これらの変数はシェル変数です。それらを別のプログラムへのパラメータとして展開するには(すなわちexpr)、$プレフィックスを使う必要があります。

expr $x / $y

それが文句を言ったのは、それがあなたがアルファベット文字を操作しようとしていると思ったからです(すなわち非整数)

Bashシェルを使用している場合は、式構文を使用して同じ結果を得ることができます。

echo $((x / y))

または

z=$((x / y))
echo $z
157
paddy

私はそれがすでに他のスレッドで言及されていたと思います:

calc(){ awk "BEGIN { print "$*" }"; }

それならあなたは単にタイプすることができます:

calc 7.5/3.2
  2.34375

あなたの場合はそれでしょう:

x=20; y=3;
calc $x/$y

あるいは、必要に応じて、これを別のスクリプトとして追加して$ PATHで使用できるようにします。そうすれば、常にローカルのシェルで使用できます。

#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
29
zielonys

どうしてletを使わないの?私はそれがずっと簡単だと思います。これはあなたが役に立つと思うかもしれない例です:

start=`date +%s`
# ... do something that takes a while ...
sleep 71

end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds
19
user1985657

Bash変数を参照するにはパラメータの拡張が必要

ほとんどのLinuxディストリビューションのデフォルトのシェルはBashです。 Bashでは、変数は パラメータ展開 に対してドル記号の接頭辞を使用する必要があります。例えば:

x=20
y=5
expr $x / $y

もちろん、Bashには 算術演算子 と特殊な 算術展開構文 もあるので、exprバイナリを呼び出す必要はありません。別のプロセスとして。シェルにこのような作業をすべて実行させることができます。

x=20; y=5
echo $((x / y))
15
Todd A. Jacobs

考えましょう

x=50
y=5

それから

z=$((x/y))

これは正しく機能します。しかし、case文の中で/ operatorを使いたいのであれば、解決できません。 enter code here その場合、divやdevideなどの単純な文字列を使用してください。コードを見る

0
Pooja Rajput