【问题标题】:Value from pattern - bash来自模式的价值 - bash
【发布时间】:2018-01-14 14:50:25
【问题描述】:

我需要从 中获取值,如果用户输入了错误的值,那么脚本会告诉他该值不正确并要求他再次输入。

我已经有类似的东西,但它不起作用.. 有什么建议吗?

#!/bin/bash

read -r -p "Type year [value from 2019-2099]" year
if [[ "$year" =~ ^(20[1-9]|[1-9])+$ ]]; then
    mkdir -p "/home/$year/"
else
    echo "$year - value is not correct. Try again." >&2 && exit 1
fi

【问题讨论】:

  • 为什么不检查它是否是一个数字[0-9]+然后[[ "${year}" -ge 2018 ]] && [[ "${year}" -le 2099 ]]
  • 所以它现在可以工作了,但是如何循环执行呢?我的意思是当用户输入错误的值时程序会从头开始?
  • 您应该编辑您的问题以包含“循环”部分。我会把它包装成一个函数并在循环中调用它。

标签: bash loops


【解决方案1】:

您可以使用函数和until 循环来实现这一点,请考虑以下代码:

readYear() {
    read -r -p "Type year [value from 2018-2099]" year
    [[ "${year}" =~ ^[0-9]{4}$ ]] && [[ "${year}" -ge 2018 ]] && [[ "${year}" -le 2099 ]]
}

until readYear; do
    echo "${year} - value is not correct. Try again." >&2
done

如果输入的值有效,则函数返回0,然后循环终止。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    until 
        read -r -p "Type year [2019-2099]: " year
        [[ $year =~ ^2[0-9]+$ ]]  && (( year >= 2018 && year <= 2099 ))
    do
        echo "Incorrect value" >&2
    done
    
    echo "OK: $year"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多