While 循环获取用户输入的整数

While 循环获取用户输入的整数

我这周刚开始在 UNIX 上编程,我的家庭作业任务之一是创建一个脚本,该脚本读取正数直到输入 -99,负数显示错误(0 到 -98)。这是我想到的,但有点卡住了。谢谢 :)

#!/bin/bash

COUNTER=1

echo "Enter a positive integer number (-99 to quit):"
read NUMBER

echo "$NUMBER: "
while [ $NUMBER -ge $COUNTER ]; do
    echo $COUNTER
    ((COUNTER++))
done

答案1

#!/bin/bash

while true; do
    read -p 'Number (-99 to quit): '

    if ! [[ "$REPLY" =~ ^-?[0-9]+$ ]]; then echo 'Error: Not an integer' >&2
    elif (( REPLY == -99 ));           then break
    elif (( REPLY <= 0   ));           then echo 'Error: Need positive integers >0' >&2
    else
        printf 'Got "%d", that is number %d\n' "$REPLY" "$(( ++c ))"
    fi
done

这是一个无限循环,当用户输入时退出-99。任何正整数响应都会提示代码说明Got "some number"目前为止读取了多少个有效数字,而负整数、零或非数字输入将给出有关标准错误的诊断消息。如果没有给出任何其他变量名称,代码使用的变量REPLY是写入的变量。read

正确数字输入的测试是通过将响应与正则表达式进行匹配来完成的^-?[0-9]+$。这个表达式将匹配如果响应采用我们期望的形式(可选的破折号后跟至少一位数字)。如果不匹配,则会在标准错误上发出诊断消息。

直到第一个elif我们都不能确定它$REPLY是一个整数。之后,我们用于(( ... ))比较的算术评估。

的测试-99需要在负整数的测试之前进行,否则我们将无法退出循环。

答案2

如果我理解正确的话,这应该有效:

#! /bin/bash -

read -p "Enter a positive integer (-99 to quit): " USR_INT

while [[ -n "$USR_INT" ]]; do

    case "$USR_INT" in
        -99)
            echo "Exiting..."
            exit 0
            ;;
        -*)
            echo "Error, please enter a positive integer."
            exit 1
            ;;
        0)
            echo "Error, please enter a positive integer."
            exit 1
            ;;
        [0-9]*)
            echo "You have entered $USR_INT"
            ;;
        *)
            echo "Error, please enter a positive integer."
            exit 1
            ;;
    esac

    read -p "Enter a positive integer (-99 to quit): " USR_INT

done

答案3

保持简单:

!/bin/bash

while :
do
   echo "Enter a positive integer number (-99 to quit):"
   read NUMBER

   if (( NUMBER == -99 ))
   then
      exit
   fi

   echo "$NUMBER: "

   COUNTER=1
   while (( COUNTER <= NUMBER ))
   do
       echo $COUNTER
       ((COUNTER++))
   done
done

相关内容