编写一个bash脚本,添加其命令行参数并显示结果。假设命令行参数是除参数本身之外的所有整数。
例如:
% addprogram 2 5 7
The total is 14
我尽我所能,似乎无法在网上找到任何东西,请保持答案非常简单。
我尝过这样的话:
#!/bin/bash
total += $@
但我不认为bash中存在运算符。
我的算法是这样的:
答案 0 :(得分:7)
因为没有人完成它
IFS=+
bc<<<"$*"
使用bc
可以获得bignums;当数字很大时,shell内置算法会失败。
expr
可能会也可能不会取决于它是否是最近的GNU coreutils版本。
IFS
和<<<
只是让它更短的技巧。
echo $* | sed 's/ /+/g' | bc
答案 1 :(得分:5)
posix兼容版本:
for i do
sum=$(expr $sum + $i)
done
echo $sum
请注意,默认情况下for
会重复$@
。
答案 2 :(得分:2)
这样的东西?
for n in $@
do
let sum=$sum+$n
done
echo The total is $sum
答案 3 :(得分:1)
我喜欢awk
,所以我会这样做:
echo $@ | tr ' ' '\n' | awk '{sum+=$0}END{print sum}'
纯粹的bash版本可能会像:
echo $@ | tr ' ' '\n' | ( sum=0; while read; do sum=$((sum+REPLY)); done; echo $sum )
答案 4 :(得分:0)
按照您提供的步骤,shift
和expr
:
sum=0
while [ -n "$1" ]; do
sum=`expr $sum + $1`
shift
done
echo $sum
答案 5 :(得分:0)
我会这样做:
total=0
for i in $@; do
(( total+=i ))
done
echo "The total is $total"