以下是我要做的事情:$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循环遍历所有数字,并将它们添加到总和中。
替代想法:在\n
之后用cat $*
替换所有空格,然后将其回显到某个文件,并使用类似的文件阅读器 - >在Java中读取while循环行。
以下是我对shell不了解的内容,当您cat $*
时,是否将其分配给某些内容,例如a=cat $*
并通过[0]获取值?当你进行while循环时,你是while read a
还是你while
关于什么?
第一次在这里发帖,自学习比我想象的要难得多。
感谢您的帮助!
答案 0 :(得分: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 。 这是否想要你想完成?
答案 1 :(得分:1)
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撰写的有效Awk编程,第4版。