5

I have a file out.csv I have to check if the name inputed by user exists in the file(comma separated) or not. I am taking name using read but while checking for equality I am getting error

    IFS=","
    while read tname tnum
        do
            if [ $tname -eq $name ]; then
                flag=1
                break
            fi
        done < out.csv
    echo "$ch"
12

You're getting this error since you are trying to compare string using equality operators intended for integers, -eq, -ne, -gt, and similar are integer functions.

To compare strings use = to compare for equality OR != to compare for non-equality.

Check this for more on comparison operators.

if [ $tname -eq $name ]; then

should be changed to:

if [ "$tname" = "$name" ]; then

(also remember to quote your variables).

  • if [ $tname = $name ]; then also works what difference will it make if we add inverted commas(like "$tname") – user2179293 Sep 8 '13 at 10:38
  • 2
    @user2179293 Without quotes, the value of each variable is interpreted as a whitespace-separated list of glob patterns. With double quotes, the value of each variable is interpreted as a string. If you don't understand this, keep it simple: always put double quotes around variable substitutions, i.e. [ "$tname" = "$name" ]. Leave off the quotes only if you've read When is double-quoting necessary? and remember all the rules and hate the next person who will maintain that script. – Gilles Sep 8 '13 at 23:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.