Celeb Glow
general | March 06, 2026

How to test if a variable is equal to a number in shell

I have this shell script that isn't working.

Input:

Server_Name=1
if [ $Server_Name=1 ]; then
echo Server Name is 1
else
echo Server Name is not 1
fi

Output:

Server Name is 1

But, if i change Server_Name=2, the output is:

Server Name is 1

When I change Server_Name to 2, I want it to say: Server Name is 2.

I know it is the if [ $Server_Name=1 ]; part.

How do i fix it?

1

5 Answers

Your script indicates you are using string comparisons.

Assume server name could be a string instead of number only.

For String comparisons:
if [[ "$Server_Name" == 1 ]]; then

Notes:

  • Spacing around == is a must
  • Spacing around = is a must
    if [ $Server_Name=1 ]; then is WRONG

  • [[ ... ]] reduces errors as no pathname expansion or word splitting takes place between [[ and ]]

  • Prefer quoting strings that are "words"

For Integer comparisons:
if [[ "$Server_Name" -eq 1 ]]; then


More information:

1

Try this:

if [ $Server_Name -eq 1 ];then
[ $Server_Name=1 ]

does not work as intended because the syntax inside the single brackets isn't special to Bash. As usual, the variable $Server_Name gets substituted by 1, so all the test ([) command sees is a single argument: the string 1=1. Since that sting has a non-zero length, test returns true.

For POSIX-compliant shells, you can use the following test commands:

[ "$Server_Name" = 1 ]

checks is the $Server_Name is equal to the string 1.

[ "$Server_Name" -eq 1 ]

checks is the $Server_Name is equal to the number 1, i.e., it does a numeric comparison instead of a string comparison.

The return value of the two command will differ, e.g., if you define Server_Name=01. The first one will return false, the second will return true.

Note that if the possibility exists that the variable $Server_Name is undefined, it must be quoted or test will display an error when invoked.

Try,

 #!/bin/bash Server_Name=50 if [ $Server_Name = 49 ] then echo "Server Name is 50" else echo "Server Name is below 50" fi

output:

 #./scriptname.sh Server Name is below 50

Simple answer. Your code is correct - almost. the only thing you are missing is spaces... (and well maybe an extra "=")

if [ $Server_Name=1 ]; then

will not compute correctly.

if [ $Server_Name == 1 ]; then 

is what you seek.

And now the statement about string versus numbers. Whenever you are searching for comparison like is / is-not, then == will always be fine.

And i assume you always have a server name as a string, not a number - right? ;-)

Good luck with your coding sturdy apprentice.

Ciao

0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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