質問:
時には、コマンドライン環境で簡単な算術演算を実行する必要があります。 EGは次の出力を提供します。
Disk /dev/sdb: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 hidden, diag
2 106MB 64.1GB 64.0GB ext4
3 64.1GB 192GB 128GB ext4
5 236GB 256GB 20.0GB linux-swap(v1)
簡単な計算方法はありますか?コマンドラインからパーティション 3 と 5 の間の未割り当てスペースのサイズはどのくらいですか?
私が試したこと:
紀元前
bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
236-192
44
quit
どこ勇敢な236-192
上記は簡単なbc 1+1
エコーのために入力する必要があるすべてです。File 1+1 is unavailable.
表現
expr 236 - 192
どこに入るの?スペースbeforeとafter演算子もexpr 1+1
同様にエコーです1+1
。
答え1
以下を使用すると、関連する詳細を減らすことができますbc
。
$ bc <<<"236-192"
44
$ bc <<<"1+1"
2
(シェルがこれをサポートすると仮定)。
関数として使用するには:
$ c() { printf "%s\n" "$@" | bc -l; }
$ c 1+1 22/7
2
3.14285714285714285714
(-l
標準数学ライブラリを有効にし、基本倍率を20に増やします。)
c
定義を常に使用できるようにするには、お気に入りのシェル起動ファイルに定義を保存します。
答え2
一般化する
複数のソリューションが一覧表示されます(シェル、awk、dc、perl、pythonなど)。
関数は任意のオプションで定義できます。 (gawkが使用するのに最も柔軟なようです)
c () { local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}
次のように使用してください。
$ c 236- 192
44
シェル
これ最も単純なCLIのcalcはCLI(シェル)自体です(IFS
デフォルトの場合)。
$ echo $(( 22 + 333 ))
355
スペースは省略できます。
$ echo $((22*333))
7326
このためPOSIXの一部 ほぼすべての殻がそれを持っています。そしてそれは含んでいる最大C数学関数(zshの優先順位が異なる場合を除き、C_PRECEDENCESを設定すると互換性のある値として返されます):
$ echo $((22*333^2))
7324
そして一部シェルにはほとんどのC数学構文(カンマを含む)があります。
$ echo $((a=22,b=333,c=a*b,c))
7326
しかし、一部のシェルでは整数数学にすぎません(現在のオペレーティングシステムでは通常2 63未満)。
$ echo $((1234/3))
411
$ zsh -c 'echo $((2**63))'
-9223372036854775808
一部のシェルは浮動数学を実行できます。
$ ksh -c 'echo $((1234/3.0))'
411.333333333333333
$ ksh -c 'echo $((12345678901234567890123/3.0))'
4.11522630041152263e+21
zshの使用を避けてください(zcalcにも同様の問題があります):
$ zsh -c 'echo $((12345678901234567890123 + 1))'
zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1
-1363962815083169259
expr
時には奇妙な脱出が必要な場合もありますので、避けることをお勧めします。
$ expr 22 \* 333
7326
紀元前
次のレベルは(そしてPOSIX)bc
(RPNのいとこdc
)
$ echo '22*333' | bc
7326
$ echo '22 333 * p' | dc
7326
これdc
以前は(歴史的に)bcを実装するために使用されました2017年POSIXから除外。
シェルがサポートしている場合は短いです。
$ bc <<<'22*333'
7326
でも:
$ <<<'22*333' bc
7326
どちらも内部の数学機能を備えたランダム精密電卓です。
$ bc <<<2^200
1606938044258990275541962092341162602522202993782792835301376
$ echo 's(3.1415/2)' | bc -l # sine function
.99999999892691403749
アッ
本当にそれ以降基本的な計算ツールを使用するには、別の言語にアップグレードする必要があります。
$ awk "BEGIN {print (22*33)/7}"
103.714
$ perl -E "say 22*33/7"
103.714285714286
$ python3 -c "print(22*33/7)"
103.71428571428571
$ php -r 'echo 22*33/7,"\n";'
103.71428571429
機能
上記のいずれかのオプションで関数を定義できます。
c ()
{
local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}
そして、以下を使用してください:
$ c 22* 33 /7 # spaces or not, it doesn't matter.
103.714285714285714285714285714285714285714285714285714285714
答え3
読むこのページのコメントcalc
私はあなたが望むことを正確に実行するUNIX / Linuxというプログラムを見ました。 Debian/Ubuntu/派生プログラムの場合:
sudo apt-get install apcalc
またはFedora Linuxの場合:
sudo dnf install calc
その後、次のことができます。
calc 236-192
alias c='calc'
または に.bashrc
エイリアスを追加すると、/etc/bash.bashrc
次のようになります。
c 1+1
コマンドラインから。
答え4
これunits
このプログラムは電卓として使用するように設計されていませんが、実際には電卓としてかなりうまく機能します。
$ units "236-192"
Definition: 44
$
もし表現にスペースがあり、その後、式を引用する必要があります。
指数と括弧の深いネストをサポートします。