我有这个bash脚本,我在第16行遇到了问题。如何获取第15行的先前结果并将其添加到第16行的变量中? html
#!/bin/bash num=0 metab=0 for ((i=1; i<=2; i++)); do for j in `ls output-$i-*`; do echo "$j" metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15) num= $num + $metab (line16) done echo "$num" done
我也很是喜欢这种方法,不那么杂乱: node
count=$[count+1]
我老是忘记语法,因此我来谷歌,但后来我找不到我熟悉的那个:P。 这对我来讲是最干净的,对我在其余语言中所指望的更为真实。 shell
i=0 ((i++)) echo $i;
#!/bin/bash read X read Y echo "$(($X+$Y))"
另外一种可移植的POSIX
兼容方式,用于bash
,能够在.bashrc
定义为一个函数,方便全部算术运算符。 bash
addNumbers () { local IFS='+' printf "%s\n" "$(( $* ))" }
并在命令行中调用它,由于, 函数
addNumbers 1 2 3 4 5 100 115
咱们的想法是使用输入字段分隔符(IFS) ,这是bash
一个特殊变量,用于扩展后的单词拆分以及将行拆分为单词。 该函数在本地更改值以使用分词字符做为sum运算符+
。 spa
记住IFS
局部改变,并没有考虑对默认效果IFS
的功能范围以外的行为。 man bash
页面的摘录, 命令行
shell将IFS的每一个字符视为分隔符,并将其余扩展的结果拆分为这些字符上的单词。 若是未设置IFS,或者其值正好是默认值,则会忽略先前扩展结果的开始和结束的,以及序列,而且不在开头或结尾的任何IFS字符序列用于分隔话。 code
"$(( $* ))"
表示传递给+
的参数列表,而后使用printf
函数输出和值。 该函数能够扩展为其余算术运算添加范围。 htm
您应该将metab声明为整数,而后使用算术评估 get
declare -i metab num ... num+=metab ...
有关更多信息,请参阅https://www.gnu.org/software/bash/manual/html_node/Shell-Arithmetic.html#Shell-Arithmetic