gpt4 book ai didi

linux - 使用 While 和 IF 进行验证

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:45 24 4
gpt4 key购买 nike

我正在自学 Shell 脚本。我正在尝试执行一项任务以从用户那里获取详细信息,例如用户名、他们的个人标记、DOB,并通过邮件发送报告,其中包含计算出的详细信息,例如总数和平均值。

  validate_marks() {
local Value=$1
if [ "${Value}" -ge "0" ] && [ "${Value}" -le "100" ]
then
return 0
else
echo "Enter numbers between 0-100"
exit 1.
fi

}
echo "Enter Marks for each subject:"
read -p "Enter English Marks:" ENG
validate_marks $ENG
read -p "Enter Maths Marks:" MATHS
validate_marks $MATHS
read -p "Enter Science Marks:" SCI
validate_marks $SCI
read -p "Enter History Marks:" HIST
validate_marks $HIST
read -p "Enter your Email id:" EMAIL
validate_email $EMAIL

在验证标记函数中,我检查输入的值是否在 0 -100 之间,如果更多则返回错误并返回提示直到正确。我如何实现这一目标。

最佳答案

如何修改函数以返回经过验证的分数。然后你可以封闭循环,直到在函数中给出有效数字。
然后代码将如下所示:

#!/bin/bash

function validate_marks() {
local subject=$1
local score
while true; do
read -p "Enter ${subject}:" score
if [[ "$score" =~ ^[0-9]+$ ]] && [[ "$score" -ge 0 ]] && [[ "$score" -le 100 ]]; then
echo "$score"
return
else
echo "** Enter numbers between 0-100 **" >&2
fi
done
}

echo "Enter Marks for each subject:"

ENG=$(validate_marks "English Marks")
MATHS=$(validate_marks "Maths Marks")
SCI=$(validate_marks "Science Marks")
HIST=$(validate_marks "History Marks")
EMAIL=$(validate_marks "your Email id")
  • while true 创建一个无限循环以继续请求输入,直到满足 if 条件。
  • "$score"=~ ^[0-9]+$ 部分检查用户输入是否为数字以避免内部错误。
  • bash 函数的输出通过 stdoutecho 或类似的东西传输给调用者。
  • 然后函数内的消息应该通过>&2发送到stderr

希望这对您有所帮助。

关于linux - 使用 While 和 IF 进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53288961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com