Change this line:
if [[ "$TEST" == "ON Master" ]];
To this:
if [ "$TEST" == "ON Master" ];
Details
The issue is the use of [[ .. ]]. The output is showing you the difference. Your value that you're getting for $STATUS is not simply "On Master". It most likely contains other characters, that are most likely not printable so are not being seen.
[[ .. ]]
++ echo On Master
+ TEST='On Master'
+ [[ On Master == \O\N\ \M\a\s\t\e\r ]]
[ .. ]
++ echo On Master
+ TEST='On Master'
+ '[' 'On Master' == 'ON Master' ']'
The use of double square brackets ([[ .. ]]) is discussed here on the TLDP Advanced Bash Scripting pages.
echo $STATUS
This line seems a little suspicious to me as well. I'd protect the contents of $STATUS by wrapping it in double quotes as well.
TEST=`echo "$STATUS"`
Also I'd drop the back ticks ( `...` ) and use the $( ... ) notation instead for executing this command. This change is just a best practice and isn't part of your issue though.
TEST=$(echo "$STATUS")
Control characters in output (^[[92mON^[[0m Master)
Given you're seeing these control characters in your output (^[[92m & ^[[0m) I'm suspicious that the grep command is introducing these into your output in the pipe. It may be that grep is aliases to always include the --color switch, I'd temporarily try calling the executable directly, and by pass any aliases that may be there. Just change the grep to this, /bin/grep.
The presence of these is what we suspected and is why the text was wrapping when you echo the variable $STATUS. These characters are unprintable, and change the color of the terminal to highlight matches that grep has found.
The presence of these also explains why the =~ operator didn't match too. You were trying to match 'On Master' with '^[[92mON^[[0m Master'.
Lastly the colored output with the control characters may be coming from another tool before the grep. I would need to see the actual output from /root/setup_ha to confirm this, but I would be suspicious of that tool as well in producing these characters in the pipe stream.
Stripping the control characters
I found this U&L Q&A titled: Program that passes STDIN to STDOUT with color codes stripped?.
Use either of these methods to get rid of the control characters.
Perl
$ cmd-with-colored-output | perl -pe 's/\e\[?.*?[\@-~]//g'
Sed
$ cmd-with-colored-output | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
if [ "$TEST" = "ON Master" ]; then ...instead? (What version of Bash? I can't reproduce your problem on Bash 3.2.48 or 4.1.5.) – 200_success Oct 17 '13 at 10:25STATUS='ON Master'the script prints "CLUSTER CRITICAL"); most likely your/root/setup_hareturns something that weird... – umläute Oct 17 '13 at 10:25if [[ "${STATUS}" == "ON Master" ]];– Rahul Patil Oct 17 '13 at 11:13| grep ">HA State" | awk '{print $3}' | cut -c 2-you meanawk '{if(/>HA State/) print $3;}'? (I don't really see what should thecutdo, but it definitely is possible withawk. – peterph Oct 17 '13 at 13:21=, not==. – l0b0 Oct 21 '13 at 13:17=~is for regular expressions, and works exactly like=when used with a quoted regular expression. You'd have to use=~ ON\ Master. – l0b0 Oct 21 '13 at 13:18