Integer expression expected error in shell script

后端 未结 6 1482
自闭症患者
自闭症患者 2020-12-17 08:36

I\'m a newbie to shell scripts so I have a question. What Im doing wrong in this code?

#!/bin/bash
echo \" Write in your age: \"
read age
if [ \"$age\" -le \         


        
6条回答
  •  爱一瞬间的悲伤
    2020-12-17 09:23

    This error can also happen if the variable you are comparing has hidden characters that are not numbers/digits.

    For example, if you are retrieving an integer from a third-party script, you must ensure that the returned string does not contain hidden characters, like "\n" or "\r".

    For example:

    #!/bin/bash
    
    # Simulate an invalid number string returned
    # from a script, which is "1234\n"
    a='1234
    '
    
    if [ "$a" -gt 1233 ] ; then
        echo "number is bigger"
    else
        echo "number is smaller"
    fi
    

    This will result in a script error : integer expression expected because $a contains a non-digit newline character "\n". You have to remove this character using the instructions here: How to remove carriage return from a string in Bash

    So use something like this:

    #!/bin/bash
    
    # Simulate an invalid number string returned
    # from a script, which is "1234\n"
    a='1234
    '
    
    # Remove all new line, carriage return, tab characters
    # from the string, to allow integer comparison
    a="${a//[$'\t\r\n ']}"
    
    if [ "$a" -gt 1233 ] ; then
        echo "number is bigger"
    else
        echo "number is smaller"
    fi
    

    You can also use set -xv to debug your bash script and reveal these hidden characters. See https://www.linuxquestions.org/questions/linux-newbie-8/bash-script-error-integer-expression-expected-934465/

提交回复
热议问题