我正在尝试计算通过命令行输入到我的脚本文件的数字总和。这是我的代码
#!/bin/bash
for ((i=0;i<=$#;i++))
do
sum=$(($i + $sum))
done
echo $sum | bc
我的终端输入是
bash file.sh 1 2
所以输出应该是3,但我得到了
syntax error: operand expected (error token is "+ ")
答案 0 :(得分:1)
要遍历所有命令行参数,可以使用shell for
语句的简化形式:
sum=0
for i do
((sum += i))
done
bash和许多其他shell接受 ((sum+=i))
;对于Posix兼容的shell,您可以使用内置:
的算术扩展:
: $((sum += i))
答案 1 :(得分:0)
实际的错误原因是因为未初始化的变量sum
经历了循环的第一次迭代。在进入循环之前初始化变量。
另一个主要的逻辑缺陷是你甚至没有迭代输入参数,而只是在计数器i
上,如果从命令传递1 2
以外的参数,它将产生不正确的结果 - 线。
你需要传递实际的参数argc
和argv
(arg count和arg vector:仅用于理解目的),你根本不需要bc
argc=$#
argv=("$@")
sum=0
for ((i=0; i<${argc}; i++)); do
sum=$((${argv[i]} + $sum))
done