bash: integer expression expected

38,762

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

Share:
38,762
Bob Ramsey
Author by

Bob Ramsey

Updated on September 18, 2022

Comments

  • Bob Ramsey
    Bob Ramsey over 1 year

    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"
    
  • Bob Ramsey
    Bob Ramsey over 10 years
    if [ $tname = $name ]; then also works what difference will it make if we add inverted commas(like "$tname")
  • Gilles 'SO- stop being evil'
    Gilles 'SO- stop being evil' over 10 years
    @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.