Shell编程:编写sum函数,计算所有参数之和
今天有网友求助,说是正在考试,有一道题不会做。题目不是很难:编写sum函数,计算所有参数之和。这道题的编码思路很简单,只涉及数学运算和shell参数。
花了几分钟,初步的测试代码如下:
sum=0
for i in $@
do
sum=`expr $sum \+ $i`
done
echo $sum
$@ 是取shell脚本接收到的所有参数,使用for in 来迭代取出每个参数
expr 就是计算表达式,比如expr foo=1 + 1 ,结果为2
试运行:
可以看到,运算结果是正确的,稍加修改这道题就可以交卷了
最终代码:
#!/bin/bash
# filename: getsum.sh
function params_sum(){
sum=0
for i in $@
do
sum=`expr $sum + $i` 2>/dev/null
# 如果expr 的退出码不为0,则参数中包含字符或者其它非整数,提示用户重新输入
if [[ $? -ne 0 ]];then
echo "$i is not a Integer number ,please reenter!"
fi
done
echo $sum
}
params_sum $@
解释:
利用 expr 的报错来判断所输入的参数是否是整数,如果有字符或者浮点数则报错,提示重新输入
2>/dev/null 将expr 报错指向null
运行结果:
这段代码仍不完美,下一篇文章详细介绍 Shell运算 和shell参数处理之后再修改它,相信聪明的读者已经看出问题所在了吧。