1

私のスクリプトは、名前、電話番号、および生年月日を要求し、これらの詳細を「birthday.csv」と呼ばれるコンマ区切りの値ファイルに修正します。

次に、「birthday.csv」を生年月日で並べ替えます。新しくソートされたファイルが表示されます。また、各人の年齢とファイル内のエントリ数も計算します。

私の問題は、すべての情報を取り込むが、内容を印刷する前にファイルをソートしないことです。

コードは次のとおりです。

a=0
while [ $a -lt 2 ];
do
    echo Please enter a first name
    read firstName
    echo Please enter last name
    read lastName
    echo Please enter phone number
    read phoneNumber
    echo Please enter date of birth - format dd/mm/yyyy
    read dob
    echo "$firstName,$lastName,$phoneNumber,$dob" >> Birthdays.csv
    echo If you would like to add another person press 1 or enter 2 to proceed
    read a
done

INPUT=./Birthdays.csv
OLDIFS=$IFS
IFS=","
[ -f ${INPUT} ] && while read Name Surname Telephone DOB
do
    birthMonth=${DOB:0:2}
    birthDay=${DOB:3:2}
    birthYear=${DOB:6:4}

    currentDate=`date +%d/%m/%Y`

    currentMonth=${currenDate:0:2}
    currentDay=${currentDate:3:2}
    currentYear=${currentDate:6:4}

    if [[ "$currentMonth" -lt "$birthMonth" ]] || [[ "$currentMonth" -eq "$birthMonth" && "$(currentDay)" -lt "$($birthDay)" ]]
    then
        let Age=currentYear-birthYear-1
    else
        let Age=currentYear-birthYear
    fi

    echo "Name : $Name"
    echo "Surname : $Surname"
    echo "Telephone : $Telephone"
    echo "DOB : $DOB"
    echo "Age : $Age"
    echo "##########################################"
done < $INPUT
IFS=$OLDIFS
    echo $DATE

exit 0;

問題はにあると思います

if [[ "$currentMonth" -lt "$birthMonth" ]] || [[ "$currentMonth" -eq "$birthMonth" && "$(currentDay)" -lt "$($birthDay)" ]]
then
    let Age=currentYear-birthYear-1
else
    let Age=currentYear-birthYear
fi

しかし、何が原因でソートされないのかわかりません。

4

2 に答える 2

1

まず、「$(currentDay)」と「$(currentDay)」を囲む角かっこを削除します

于 2013-01-18T14:57:03.890 に答える
0

少なくとも1つのバグがあります。

if [[ "$currentMonth" -lt "$birthMonth" ]] || [[ "$currentMonth" -eq "$birthMonth" && "$(currentDay)" -lt "$($birthDay)" ]]

"$(currentDay)"ちょうどである必要があり、ちょうど"$currentDay""$($birthDay)"ある必要があります"$birthDay"

ここにもタイプミスがあります:

currentMonth=${currenDate:0:2}

それはそうあるべきですcurrentDateset -uこのような間違いを見つけるために、スクリプトの先頭に配置してください。

また、Matが言ったように、並べ替えコードは表示されません:)

于 2013-01-17T22:56:38.427 に答える