如何验证函数内的用户响应并在给出有效响应后返回主程序?

如何验证函数内的用户响应并在给出有效响应后返回主程序?

我需要验证一系列需要 A 或 B、Y 或否等响应的用户条目。我想验证输入的值是否符合允许的响应集。编写一个函数来根据各自的要求执行每个验证。功能似乎可以工作,但一旦响应令人满意,我就无法脱离主循环。

#!/usr/bin/bash
function valcheck()
{
while true;
do
  if [[ "$response" =~ [$1] ]]
  then
    echo "Acceptible response"
    return 0
  else
    echo "Invalid response!"
    continue
  fi
  done
}

#call function
printf "What is the response [A/P]: "
while true; do
  read -r response
  valcheck "AaPp"
done

答案1

不需要有两个while循环。另外,我不喜欢while true循环。您可以将用户输入的读取和验证减少到一个函数:

#!/usr/bin/bash

valcheck() {
    while
        printf '%s' "$2"
        read -r response
    do
        if
            [[ "$response" =~ ^[$1]$ ]]
        then
            echo "Acceptable response!"
            break
        else
            echo "Invalid response!"
        fi
    done
}

valcheck "AaPp" "What is the response [A/P]: "

答案2

您正在寻找的命令字是当您的子例程返回成功时break退出循环:while true

valcheck "AaPp" && break

附带说明一下,您可能希望将提示printf命令移到循环内。当响应不是“a”或“p”时,用户再次询问您想要的答案会更好一些。

相关内容