1

エラーが発生しています:34行目:#10#1001:構文エラー:オペランドが必要です(エラートークンは "#10#1001")

変更したばかりです

[! -f INPUT ] & 

[ ! -f INPUT ] &&

そして今、私はエラーが発生しています

line 34: #10#1001: syntax error: operand expected (error token is "#10#1001")

スクリプトを実行するとき。

このスクリプトは、ユーザーの名前、電話番号、生年月日を入力し、情報を並べ替えて年齢を計算します。

要求しているオペランドがわからないため、このエラーの原因となっている可能性があります

#!/bin/bash

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" >> userBirthdays.csv
    echo If you would like to add another person press 1 or enter 2 to proceed
    read a
done

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

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

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

                    if [[ "$currentMonth" -lt "$birthMonth" ]] || [[ "$currentMonth" -eq "$birthMonth" && "$((#10$currentDay))" -lt "$((#10$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;
4

2 に答える 2

2

この行には 2 つの間違いがあります。

[ ! -f INPUT ] && while read  while read Name Surname Telephone DOB

そのはず:

[ -f ${INPUT} ] && while read Name Surname Telephone DOB

次を使用してスクリプトをデバッグすることをお勧めします。

bash -x /path/to/birthdays.bash 

これにより、各コマンドを実行する前にコマンド トレースが出力されます。

于 2013-01-17T20:00:34.063 に答える
1

-lt比較 (およびフレンド) は、文字列ではなく整数用です。そして、その前に追加することcurrendDayにより、整数以外の文字列に変換し#10ます(ちなみに、2回行います)。

ここでのあなたの意図はあまり明確ではありません。文字列を比較しますか? 次に、<代わりに使用し-ltます。数字になりたいcurrentDayですか?次に#10、その値の前に追加しないでください (両方の場所で今それを行います)。

于 2013-01-17T19:56:01.357 に答える