![添加数字的脚本存在问题](https://linux22.com/image/130143/%E6%B7%BB%E5%8A%A0%E6%95%B0%E5%AD%97%E7%9A%84%E8%84%9A%E6%9C%AC%E5%AD%98%E5%9C%A8%E9%97%AE%E9%A2%98.png)
我现在在提交脚本时遇到问题。我想知道你们中的任何人是否有任何想法,为什么它不接受它目前正在工作的情况?它想要将 6、9、-4 和 7 加在一起,而我的脚本正在这样做。也许有方法可以改进它?任何想法都会有很大帮助。
#!/bin/bash
sum=0
for number in $1 $2 $3 $4
do
sum=$(($1 + $2 + $3 + $4))
echo $number
done
echo $sum
答案1
如果您只想添加 4 个数字,这应该足够了:
sum() {
printf '%d\n' "$(( $1 + $2 + $3 + $4 ))"
}
或者,如果您想添加任意数量的数字:
sum() {
local number sum
for number; do
(( sum += number ))
done
printf '%d\n' "$sum"
}
答案2
让 shell 为您服务。并在需要时使用外部实用程序。
#!/bin/bash
IFS=+
echo "$*" | bc
答案3
如果您知道总是会在命令行上获得四个整数,则无需循环:
#!/bin/sh
sum=$(( $1 + $2 + $3 + $4 ))
printf 'sum is %d\n' "$sum"
或者,只需
#!/bin/sh
printf 'sum is %d\n' "$(( $1 + $2 + $3 + $4 ))"
为了支持任意数量的参数,你将要需要循环:
#!/bin/sh
while [ "$#" -gt 0 ]; do
sum=$(( sum + $1 ))
shift
done
printf 'sum is %d\n' "$sum"
该脚本将迭代其命令行参数,将第一个参数添加到sum
变量中并将其从命令行参数列表中移出,直到没有剩下任何参数。变量$#
扩展将扩展为命令行参数的数量,同时将从列表中shift
删除,移至其位置(以及其他位置)。$1
$2
$3
$2
或者:
#!/bin/sh
for num do
sum=$(( sum + num ))
done
printf 'sum is %d\n' "$sum"
这不会不断地移动命令行参数列表,而是使列表保持不变,而是对其进行迭代,依次添加每个参数sum
。
循环for num do
头也可以这样写for num in "$@"; do
。