【问题标题】:Basic n number addition program in shellshell中的基本n数加法程序
【发布时间】:2016-02-05 06:48:52
【问题描述】:

这是我想要做的:$echo 1 3 5 7 9 | sh test,它输出 25。(最终目标是一个导数计算器,不要笑我,我才 12 年级)。

当给定变量的数量时,这很容易。但是如果你不知道有多少变量怎么办,我如何把 echo 后面的所有内容,在这种情况下为 1 3 5 7 9,并将它们放入类似于 Java 中的数组的东西中,然后简单地做类似 for i in array and i+=1 的东西?

这是我的想法:使用cat $*读取所有数字,然后使用while循环遍历所有数字,并将它们添加到总和中。

另一种想法:在cat $* 之后用\n 替换所有空格,然后将其回显到某个文件,并使用类似的文件阅读器-> 在Java 中读取行用于while 循环。

这是我对 shell 不了解的地方,当您 cat $* 时,您是否将其分配给某些东西,例如 a=cat $* 并通过 a[0] 获取值?当你执行while循环时,你是while read a还是while是关于什么的?

第一次在这里发帖,自学比我想象的要难得多..

感谢您的帮助!

【问题讨论】:

标签: shell


【解决方案1】:

例如,我有 test.sh 脚本,其中包含:

注意:$@ 包含您在运行脚本时将包含的所有参数。没有限制。然后迭代它。

#!/bin/bash
ctr=0

for num in "$@"; do
ctr=$[ctr + num]
done
echo "$ctr"

如果我要像这样运行它:

./test.sh 1 2 3 4 5

它将给出 15 的输出。 这是你想要完成的愿望吗?

【讨论】:

    【解决方案2】:

    UNIX shell 是一个环境,可从中操作(创建/移动/销毁)文件和进程以及对工具的顺序调用。虽然可以强制 shell 语言做更多的事情,但如果你这样做,最终结果总是比你简单地使用正确的工具来完成这项工作更糟糕。在这种情况下,您可以使用标准(即在所有 UNIX 系统上都可用)通用 UNIX 文本处理工具 awk:

    $ cat tst.sh
    awk '{ for (i=1;i<=NF;i++) tot+=$i; print tot }'
    
    $ echo '1 3 5 7 9' | tst.sh
    25
    
    $ echo '1.5 3.14' | tst.sh      
    4.64
    

    阅读 Arnold Robbins 所著的《Effective Awk Programming, 4th Edition》一书。

    【讨论】:

      猜你喜欢
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多