添加数字的脚本存在问题

添加数字的脚本存在问题

我现在在提交脚本时遇到问题。我想知道你们中的任何人是否有任何想法,为什么它不接受它目前正在工作的情况?它想要将 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

相关内容