2

我需要一些帮助。我一直在我的程序中操纵我的日期。日期的格式为 DD-MON-YY,如果用户输入了正确的日期格式,我想检查它。所以我创建了一个函数来分别测试日期、月份和年份,但是该函数还读取格式中的“-”,所以我决定使用以下代码:

echo -n " Date [ DD-MON-YY ]:"  #user will input the date
        read dates
        vardate=$ echo "$dates" | tr "-" " "
        echo $vardate

我使用它,所以当我调用函数时,“-”字符不会有问题。但现在的问题是如何保存日期的 3 部分 [日、月、年]?所以我的功能可以正确评估它。

我的功能:

datefxn(){

d1 = $date1
d2 = $month1
d3 = $year1

########## check the DAY #####################

test ${#d1} -eq 2 || s=" INVALID!"

if [ "$d1" -gt 0 ] && [ "$d1" -le 31 ]
then
    break ;;
else
    echo "Month is OUT OF RANGE!"
fi

########## check the DAY #####################  

test ${#d2} -eq 3 || s=" INVALID!"

MONTH=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
echo "${MONTH[@]}"

for element in "${MONTH[@]}"
do
if [[ $element == $d2 ]]
then
       echo " a "
      break
        else
        echo " WAAA "
    fi
    done
########## check the YEAR ##################### 

test ${#d3} -eq 2 || s=" INVALID!"


} #end datefxn()
4

1 回答 1

1

像这样的东西:

#!/bin/bash
datefxn () {
        d1=$1
        d2=$2
        d3=$3
        echo "Date is $d1"
        echo "Month is $d2"
}

inp='24-12-2004';
vardate=$(echo "$inp" | tr "-" " ")
datefxn $vardate

上述解决方案用于修复您的代码。

更新:一种更好的方法是使用数组和就地替换:

#!/bin/bash

datefxn () {
        dt=($(echo ${1//-/ }))
        echo "Date  is  ${dt[0]}"
        echo "Month is  ${dt[1]}"
        echo "Year  is  ${dt[2]}"
}

inp='24-12-2004';
datefxn "$inp"
于 2013-01-02T08:18:45.277 回答