Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparing variables in shell scripts

I have got a project that involves shell scripts and comparing values/variables within them. I have looked here and elsewhere on comparing variables and I have tried all the various examples given but I am running into something that is not as advertised. OS is Solaris10

I have created the following script as a learning experience-

#!/bin/ksh

stest()
{
if $X = $Y
then echo they're the same
else echo they're notthe same
fi
}


X=a
Y=a

stest

echo completed

I keep getting some variation of the following-

using shell sh or ksh-

#./test.sh
./test.sh[2]: a:  not found
completed

using shell bash-

#./test.sh
./test.sh: line 5: a: command not found
completed

I have tried enclosing the if $X = $Y line in brackets and double brackets and I get back

[a:  not found  

or

[[a:  not found

If I change the variables X and Y to the numeral "1" I get the same thing-

./test.sh[2]: 1:  not found

I have tried enclosing things in single quotes, double quotes & backwards quotes.

Any help is appreciated.

like image 663
user3047191 Avatar asked Nov 28 '13 20:11

user3047191


People also ask

How do I compare two variables in bash?

When comparing strings in Bash you can use the following operators: string1 = string2 and string1 == string2 - The equality operator returns true if the operands are equal. Use the = operator with the test [ command. Use the == operator with the [[ command for pattern matching.

What is $? == 0 in shell script?

$? is the exit status of the most recently-executed command; by convention, 0 means success and anything else indicates failure. That line is testing whether the grep command succeeded. The grep manpage states: The exit status is 0 if selected lines are found, and 1 if not found.

What is == in shell script?

== operator is the operator that equates the values of two operators. It returns true if the values are equal and returns false otherwise. != operator is the operator that equates the values of two operators and check for their inequality.

How do you check if two variables are equal in bash?

You can check the equality and inequality of two strings in bash by using if statement. “==” is used to check equality and “!= ” is used to check inequality of the strings.


1 Answers

This KornShell (ksh) script should work:

soExample.ksh

#!/bin/ksh 

#Initialize Variables
X="a"
Y="a"

#Function to create File with Input
#Params: 1}
stest(){
    if [ "${X}" == "${Y}" ]; then
        echo "they're the same"
    else 
        echo "they're not the same"
    fi
}

#-----------
#---Main----
#-----------
echo "Starting: ${PWD}/${0} with Input Parameters: {1: ${1} {2: ${2} {3: ${3}"
stest #function call#
echo "completed"
echo "Exiting: ${PWD}/${0}"

Output :

user@foo:/tmp $ ksh soExample.ksh
Starting: /tmp/soExample.ksh with Input Parameters: {1:  {2:  {3:
they're not the same
completed
Exiting: /tmp/soExample.ksh

ksh version:

user@foo:/tmp $ echo $KSH_VERSION
@(#)MIRBSD KSH R48 2013/08/16
like image 143
javaPlease42 Avatar answered Oct 21 '22 10:10

javaPlease42