I have this shell script that isn't working.


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


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?

  • As David points out below, you must use "-eq" to test numeric values. You might also want to check for a blank variable to avoid errors; if [ ! "x$var" = "x" ]; then\n if [ $var -eq 1 ]; then ... Dec 16 '13 at 1:41

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


  • 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:

  • 5
    [[ is bash syntax and the OP was asking about shell, where it wouldn't work Feb 16 '18 at 16:56

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.



 if [ $Server_Name = 49 ]
 echo "Server Name is 50"
 echo "Server Name is below 50"


 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.



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.