Reuben
Reuben

Reputation: 5736

String comparison in bash is not working

Hi I'm new to bash scripting. Just wrote this simple program but it is throwing error.

#!/bin/bash
os=`uname -o`
echo $os
if ["$os"=="GNU/Linux"] ; then
    echo "Linux"
else
    echo "Windows"
fi 

Using == or -eq for both cases I'm getting the following error and it is printing the else condn.

./ostype.sh: line 3: [GNU/Linux==GNU/Linux]: No such file or directory

Windows

Bash version : GNU bash, version 3.2.48(1)-release (x86_64-suse-linux-gnu)

Upvotes: 11

Views: 25544

Answers (3)

Adz
Adz

Reputation: 49

You could use [[ "$os" == "GNU/Linux" ]]

Upvotes: 0

Shawn Chin
Shawn Chin

Reputation: 86854

Use = for string comparison. See: http://tldp.org/LDP/abs/html/comparison-ops.html

Also, there should be a space around the square brackets and the comparison operator, i.e.

if [ "$os" = "GNU/Linux" ]; then 
  ^ ^     ^ ^           ^  
  | |     | |           |
   \-\-----\-\-----------\-- (need spaces here)

Upvotes: 17

yiding
yiding

Reputation: 3592

try

if [ "$os" = "GNU/Linux" ]

note the spaces, and the single =.

[ is actually a program, and the rest are arguments!

Upvotes: 40

Related Questions