【问题标题】:how to perform a basic arithmetics from unix csh/tcsh shell如何从 unix csh/tcsh shell 执行基本算术
【发布时间】:2009-09-16 01:02:14
【问题描述】:

在windows下,当我需要进行基本计算时,我会使用内置计算器。现在我想看看如果你只有一个外壳,常见的方法是什么。

谢谢

【问题讨论】:

  • 我不敢相信没有人提出 Perl 解决方案! ;-)
  • 还有许多基于 gui 的 linux 计算器。但 dc 或 bc 很好

标签: linux shell unix csh tcsh


【解决方案1】:

来自this web page(对于csh 和衍生产品,因为你问过):

% @ x = (354 - 128 + 52 * 5 / 3)
% echo Result is $x
Result is 174

% set y = (354 - 128 + 52 / 3)
% echo Result is $y
Result is 354 - 128 + 52 / 3

注意不同的结果。

就个人而言,我坚持使用/bin/sh 并调用awk 或其他东西(以获得最大的可移植性),或者其他人展示了bash 方法。

【讨论】:

    【解决方案2】:

    您可以使用dc。或bc

    【讨论】:

    • dc 如果您喜欢 RPN(类似 Forth),bc 如果您喜欢中缀表示法(类似 C)
    • 对。 (但是 RPN 是一个神圣的极客信条;让我们不要说它像另一个人,兄弟;)
    • 一个真正的信徒写他的散文subject object verb:“RPN,神圣的极客信条。”
    • 主宾动词一个真正的信徒,他的散文写道:“RPN,神圣的极客信条。”
    【解决方案3】:

    这里给出了很多很好的解决方案,但是 在 shell 中进行算术运算的“经典”方法是 与 expr。

    【讨论】:

    • 唯一需要注意的是,由于 "*" 是 shell 中的一个特殊字符,所以在使用 expr 进行乘法运算时需要对其进行转义。例如。 $ expr 1 + 2 * 3 expr: 语法错误 $ expr 1 + 2 * 3 7
    【解决方案4】:

    $(( )) 内重击supports basic (integer only) arithmetic

    $ echo $(( 100 / 3 ))
    33
    $ myvar="56"
    $ echo $(( $myvar + 12 ))
    68
    $ echo $(( $myvar - $myvar ))
    0
    $ myvar=$(( $myvar + 1 ))
    $ echo $myvar
    57
    

    (直接从 IBM 链接复制的示例)

    【讨论】:

    • +1 而且,我还将它用于定点非整数问题,方法是在等式中添加零并在我的脑海中插入小数点。 :)
    • 在这些方面,((...)) 是相似的,但作为一个命令(不替代结果,$? 被设置),$[...]$((...)) 的缩写。
    • $(( ... )) 是所有 SH 派生 shell 的有效语法,例如重击,Zsh。见The Open Group Base Specifications Issue 7
    • 这个问题专门针对 tcsh/tcl。
    【解决方案5】:

    您可以随时使用 python 解释器,它通常包含在 linux 发行版中。

    http://docs.python.org/tutorial/introduction.html#using-python-as-a-calculator

    $ python
    Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)]
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 2+2
    4
    >>> # This is a comment
    ... 2+2
    4
    >>> 2+2  # and a comment on the same line as code
    4
    >>> (50-5*6)/4
    5
    >>> # Integer division returns the floor:
    ... 7/3
    2
    >>> 7/-3
    -3
    >>> # use float to get floating point results.
    >>> 7/3.0
    2.3333333333333335
    

    等号 ('=') 用于为变量赋值。之后,在下一个交互提示之前不显示结果:

    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    

    当然还有math 模块可以解决您的大部分计算器需求。

    >>> import math
    >>> math.pi
    3.1415926535897931
    >>> math.e
    2.7182818284590451
    >>> math.cos() # cosine
    >>> math.sqrt()
    >>> math.log()
    >>> math.log10()
    

    【讨论】:

    • 是的,使用交互式 python 解释器 :-)。我的戴夫
    • 这个问题是关于 tcsh/csh 的。没有安装 python 的系统怎么办?
    【解决方案6】:

    你也可以在 bc 或 expr 不够强大的地方轻松使用 Perl:

    $ perl5.8 -e '$a=1+2; print "$a\n"' 
    3
    

    【讨论】:

    • 问题是关于 csh/tcsh。这与 perl 无关。
    • @norman_h - 您介意解释一下运行“perl”与“bc”或“dc”命令之间的有意义的区别吗,它们都不是 csh/tcsh 内置命令?除了你的元知识之外,Perl 恰好是一种强大的编程语言,除了能够完成像“bc”这样的任务之外可以吗?此外,接受的答案使用 Python,很明显这种方法对于 OP 来说非常好。
    • 就此而言,来自另一个高投票的 asnwer 的 expr 也不是 csh/tcsh 内置命令,而是一个单独的命令,例如 perl
    • 这个问题明确提到了 tcsh/csh。并非所有环境都包含重型解决方案,例如 perl/python。甚至 bc/dc 可执行文件对于基本的 csh 环境也可以认为是多余的。我认为 csh 是 shell 中的 c ......并且当前最高投票的答案显示了这种语法中的一些。 FWIW,我当前的 unix 环境(支付账单)是 tcsh 并且对附加功能非常了解,每天的工作感觉就像 1975 年。
    【解决方案7】:

    另一种选择是使用内置的 BC 命令

    【讨论】:

      猜你喜欢
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      相关资源
      最近更新 更多