繁体   English   中英

如何在 Linux shell 脚本中从用户输入中添加未知数量的数字

[英]How to add an unknown amount of numbers from user input in Linux shell script

我正在尝试将用户输入的所有数字相加,但是对于用户可以输入的数字数量没有限制。 我如何在 linux shell 脚本中对此进行编码?

到目前为止我有这个:

firstNumber=0
secondNumber=0
number=0


echo Please enter two numbers to add up

read firstNumber
read secondNumber

echo Would you like to keep adding numbers? YES OR NO
read answer

if answer = YES
then
echo Please add another number
read number
echo $(($firstNumber +$secondNumber + $number))
fi

while answer = NO
do
echo $(($firstNumber + $secondNumber))
done

正如@dash-o 推荐的那样,以 ENTER 结尾的简单输入序列是最简单的方法:

#!/usr/bin/env sh

sum=0

echo "Please enter integer numbers to add, or just RETURN to end."

while read -r number && [ -n "$number" ]; do
  if [ "$number" -eq "$number" ] 2>/dev/null; then
    sum=$((sum + number))
    echo "Sum is: $sum"
  else
    echo "$number is not a valid integer. Try again..." >&2
  fi
done

或者允许每行输入多个整数:

#!/usr/bin/env sh

# Save the shell's options state
shelloptions="$(set +o)"
# Disable globbing to prevent filename expansion in parameters
set -o noglob

sum=0

echo "Please enter integer numbers to add, or RETURN to end."

# Read lines until empty REPLY
while read -r && [ -n "$REPLY" ]; do

  # Split $REPLY as parameters
  # Globbing is turned-off so filenames will not mess with entries
  # shellcheck disable=SC2086 # Explicitly intended word splitting
  set -- $REPLY

  # Iterate numbers from the parameters array
  for number in "$@"; do

    # If $number is a valid integer
    if [ "$number" -eq "$number" ] 2>/dev/null; then
      sum=$((sum + number))
    else
      echo "$number is not a valid integer." >&2
    fi
  done
  echo "Sum is: $sum"
done

# Restore the shell's options state
eval "$shelloptions"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM