0

我们如何才能DD/MM/YYYY在 shell 代码中以格式输入来自用户的输入,直到用户不提供这种格式的输入,才会一次又一次地打印相同的提示。

printf "Please Enter START Date(DD/MM/YYYY)\n"
read date1

如何检查日期是否以 DD/MM/YYYY 格式提供。如果没有,那么如何再次开始这个循环?

4

2 回答 2

1

试试这个:

until read -p "Please Enter START Date (DD/MM/YYYY): " && [[ $REPLY == [0-9][0-9]/[0-9][0-9]/[0-9][0-9] ]]; do
    ## echo "Please enter in proper (DD/MM/YYYY) format."
    continue
done

echo 部分只是可选的,您可以考虑添加。默认情况下,如果未指定变量,则 read 将输入放在 $REPLY 变量中,但如果您愿意,可以自定义一个。

read -p "Please Enter START Date (DD/MM/YYYY): " INPUT && [[ $INPUT == ...

要获得更多 sh 兼容并根据您自己的格式,您可以拥有以下内容:

#!/bin/sh

while :; do
    printf "Please Enter START Date(DD/MM/YYYY)\n"
    read date1
    case "$date1" in
    [0-9][0-9]/[0-9][0-9]/[0-9][0-9])
        break
        ;;
    esac
done
于 2013-08-29T07:04:00.967 回答
1

此解决方案首先检查输入的所有标记的语法,然后使用命令date检查输入是否为有效日期。例如 30/02/2014 具有正确的语法,但它不是有效的日期。请注意,该date命令接受格式 MM/DD/YYYY。

#!/bin/bash

while [ 1 ]; do
    IFS="/" read -p "Please Enter START Date(DD/MM/YYYY): " d m y

    if [[ $d != [0-9][0-9] ]]; then echo "Day format invalid"; continue; fi
    if [[ $m != [0-9][0-9] ]]; then echo "Month format invalid"; continue; fi
    if [[ $y != [0-9][0-9][0-9][0-9] ]]; then echo "Year format invalid"; continue; fi

    if date -d "$m/$d/$y" > /dev/null; then
            date1="$d/$m/$y"
            break
    fi

done

# Here you can use $date1 as you prefer. For instance:
echo $date1
于 2013-08-29T07:16:31.910 回答