循环输入命令

时间:2013-08-29 06:24:49

标签: shell date input format

我们怎样才能在shell代码中以DD/MM/YYYY格式向用户提供输入,这样在用户不提供此格式的输入之前,会反复打印相同的提示。

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

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

2 个答案:

答案 0 :(得分: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

回声部分只是可选的,您可以考虑添加。 默认情况下,如果没有指定变量,则读取$ REPLY变量中的输入位置,但如果您愿意,可以使用自定义变量。

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

为了更加兼容并且基于您自己的格式,您可以拥有:

#!/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

答案 1 :(得分: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