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

你在这条线上有两个错误:

[ ! -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(顺便说一下,你做了两次)。

你在这里的意图不是很清楚。你想比较字符串吗?然后使用<而不是-lt. 你想currentDay成为一个数字吗?然后不要预先#10考虑它的价值(在这两个地方你现在都这样做)。

于 2013-01-17T19:56:01.357 回答