6

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"
user2179293
  • 1,823

1 Answers1

14

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).

Incognito
  • 376
  • if [ $tname = $name ]; then also works what difference will it make if we add inverted commas(like "$tname") – user2179293 Sep 08 '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 'SO- stop being evil' Sep 08 '13 at 23:00