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 に答える