问题:
我时不时需要在命令行环境中进行简单的算术运算。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
我需要在运算符之前和之后键入空格expr 1+1
,就像 echoes一样1+1
。
您可以减少使用涉及的详细程度
bc
:(假设你的外壳支持)。
如果您希望将其作为函数:
(
-l
启用标准数学库并将默认比例增加到 20。)c
如果您想让它始终可用,请将定义存储在您最喜欢的 shell 启动文件中。概括
列出了几种解决方案(shell、awk、dc、perl、python 等)。
可以使用任何选项定义函数(gawk 似乎是最灵活的使用)
并像这样使用它:
壳
CLI 中最简单的计算是 CLI (shell) 本身(如果
IFS
是默认值):空格可以省略:
因为它是POSIX 的一部分,所以 几乎所有的 shell 都有它。并且它包含了大部分C 语言数学功能(除了 zsh 具有不同的优先级,设置 C_PRECEDENCES 将其恢复为兼容值):
并且一些shell 具有大部分 C 语言数学语法(包括逗号):
但在某些 shell 中,它只是整数数学(在当今的操作系统中通常小于 2 63 ):
一些shell可以做浮动数学:
避免使用 zsh(zcalc 也有类似的问题):
我建议你避免
expr
,它有时需要奇怪的转义:公元前
下一个级别是(也是 POSIX)
bc
(RPN 的表亲dc
)(历史上)用于实现 bc 并在 2017 年
dc
被排除在 POSIX 之外。如果您的外壳支持它,则更短:
甚至:
两者都是具有一些内部数学函数的任意精度计算器:
awk
在那些真正基本的计算工具之后,你需要去学习其他语言
功能
您可以定义上述任何选项的函数:
并使用:
阅读本页评论,我看到一个名为的 UNIX/Linux 程序
calc
完全符合您的要求。如果在 Debian / Ubuntu / 衍生产品上:或在 Fedora Linux 上:
那么你也能:
如果你
alias c='calc'
给你的.bashrc
or添加一个别名,/etc/bash.bashrc
那么它就会变成:在命令行上。
在
zsh
:就个人而言,我喜欢libqalculate ( Qalculate的命令行版本)。
虽然界面很简单,但 (lib)qalculate 是一个功能强大、功能齐全的计算器。例如
它还可以做一些有用的事情,如制表符补全、必要时打开/关闭括号,并打印其对查询的解释。
要退出,我只需按Ctrl+ d。
为了更快地访问,将其设置为类似
alias ca='qalc'
.该
units
程序虽然不打算用作计算器,但实际上作为一个计算器运行得相当好。如果表达式中有空格,则表达式必须是引号保护的。
它支持指数和括号的深度嵌套
我在 zsh 中所做的是:
在 bash 中,我必须明确提及 cat:
如果我希望结果包含小数位(在 zsh 中工作,而不是在 bash 中),我会在其中一个操作数中添加一个小数点
正如对较早回复的评论中所述,标准 shell (ba)sh 允许在
$((...))
. 我无法仔细检查这是否是 POSIX 标准的一部分,但我确实检查了它是否也适用于 Cygwin 和 Mingw32 shell。要查看结果,您确实必须键入
echo $((...))
,这会使某些字符超过 (interactive use of)bc
。但是,要在脚本中使用结果,这很可能会比bc
解决方案更短(例如,可能是`echo ...|bc`
)。关于详细程度,该
bc
命令允许选择-q
抑制"normal GNUbc
welcome"的输出。最后,略带边界的评论,让我们注意它
bc
不仅仅是一个计算器,而是一种成熟的编程语言(包括用户定义的函数、while 和 for 循环等)。另一个事实表明,对于这种简单的计算,更喜欢内置的算术功能,而不是外部程序。也就是说,提取给定分区号的数据并处理“M”、“G”后缀,正如原始问题似乎要求的那样,可能需要(g)awk
而不是bc
.来源:https ://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
Python 在另一个选项卡中打开?
你试过concalc吗?
安装: