Operator test in bash


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Operator test in bash
# 1  
Old 05-23-2013
Operator test in bash

Hello, can you please help me because I am totally confused with a simple script:
#!/bin/bash
Code:
[[ ((5 > 9)) ]] || [[ ((7 > 10)) ]] && echo "Good Morning" 
[[ ((4 < 1)) ]] || [[ ((2 < 1)) ]] && echo "Good Night"

For me, these two strings are indentical: false || false and there is no point to execute echo command.

But the run result is confusing me:
It is displayed just one string "Good Morning".
Why is it displayed? Smilie

The used OS: Ubuntu 12.04 LTS
Thank you in advance, Best Regards

Last edited by Scott; 05-23-2013 at 06:35 PM.. Reason: Please use code tags
# 2  
Old 05-23-2013
I am not used to the [[ ]] stuff in ksh and bash,
and it seems to behave different from the obvious.
The classic way works
Code:
[ 5 -gt 9 ] || [ 7 -gt 10 ] && echo "Good Morning"
[ 4 -lt 1 ] || [ 2 -lt 1 ] && echo "Good Night"

# 3  
Old 05-23-2013
The < and > sign do a string compare: char 7 is greater than char 1, so the term is true, and it prints "Good Morning".
As MadeInGermany says, use -lt or -gt for numeric compares, and it flies.

Last edited by RudiC; 05-23-2013 at 06:37 PM.. Reason: typo
# 4  
Old 05-23-2013
You can use multiple expressions (Logical AND && , Logical OR ||) within ((...)) conditional expression for Arithmetic Evaluation.

So I guess the correct syntax would be:
Code:
(( 5 > 9 || 7 > 10 )) && echo "Good Morning"
(( 4 < 1 || 2 < 1  )) && echo "Good Night"

The reason why it was considered a string comparison because the OP used [[...]] compound command along with > < operators instead of -gt -lt operators.

But ((...)) conditional expression evaluates an arithmetic expression with > < operators.
# 5  
Old 05-24-2013
The problem has nothing to do with string comparisons. For your (overcomplicated) extended test ("[[...]]") example to work correctly, you need to use the results of the arithmetic expressions "((..))"

Once you do this, your example will work:
Code:
[[ $((5 > 9)) ]] || [[ $((7 > 10)) ]] && echo "Good Morning"
[[ $((4 < 1)) ]] || [[ $((2 < 1)) ]] && echo "Good Night"

# 6  
Old 05-24-2013
Quote:
Originally Posted by fpmurphy
The problem has nothing to do with string comparisons.
If the problem has nothing to do with string comparison, then can you please explain why "Good Morning" is getting printed while running OP's code?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Unknown test operator

O/S solaris 9 shell ksh if then chk_op="WARNING...reboot within the last 24hrs, restarted at `who -r | awk '{print $4$5"@"$6}'`" ; else if ; then last_reboot1=`who -b | awk '{print $4" "$5" "$6}'` last_reboot2='..OK..'`uptime | awk '{print$3" "$4}'` ... (4 Replies)
Discussion started by: squrcles
4 Replies

2. Shell Programming and Scripting

Unknown test operator

Hi , Os - Solaris Shell - Ksh I am getting below error in if condition + id + ./om_wf_complete.sh: gid=4081(Infadmn): unknown test operator + exit 1 if ; then touch /home/odwt/1.0.0/out/oworkflow.dat chmod 777 /home/odwt/1.0.0/out/oworkflow.dat elif ; then touch... (8 Replies)
Discussion started by: nag_sathi
8 Replies

3. Shell Programming and Scripting

Test operator

In my script (currently running on Solaris ) I'm testing for zero size with wild character. There are mutilple files exist in the directory. if then filename=`ls -1tr ${fileformat}.${date}.? | tail -1` else ${BATCH_FATAL:-echo} "$0:ERROR:No file found ${source}/${fileformat}.${date}.?"... (5 Replies)
Discussion started by: gauravgoel83
5 Replies

4. Shell Programming and Scripting

Solaris test operator -gt

Hello people, I created the below script on HP-UX #!/bin/sh SESSION_NO=`sqlplus -s ${DRBILOUKOS_USER} <<EOF SET HEAD OFF @/export/home/drbiloukos/scripts/sessions_count/no_of_sessions.sql EOF` SESSION_THRESHOLD=250 MAX_SESSIONS=`sqlplus -s ${DRBILOUKOS_USER} <<EOF SET HEAD OFF... (2 Replies)
Discussion started by: drbiloukos
2 Replies

5. Shell Programming and Scripting

unknown test operator

hi all, i am using the below command in my script if ; then This statement is causing the problme "ScriptName.ksh: XXX-XXX: unknown test operator" could you please suggest me , how can i avoid these messages. Singhal (7 Replies)
Discussion started by: singhald
7 Replies

6. Shell Programming and Scripting

FIle (directory) test operator (bash)

I'm almost pulling out my hair trying to figure out what's wrong with this... there's no reason I can see that it shouldn't be working. It seems that the code acts as though the conditional statement is true no matter what - I've even tried removing the negation operator, but it always goes into... (5 Replies)
Discussion started by: wildbluefaerie
5 Replies

7. Shell Programming and Scripting

TEST operator help

Hi I want to group like this but syntactic is not right ... Thanks if Like this below does not work properly .. if then : else usage exit 1 fi (5 Replies)
Discussion started by: zam
5 Replies

8. Shell Programming and Scripting

test: unknown operator status

hi I get test: unknown operator status if then echo "OK." return 0 else echo "not ok" 2>&1 exit -1 fi I tried to change "A" with 'A' --> same error I tried to change if , I am getting: (3 Replies)
Discussion started by: melanie_pfefer
3 Replies

9. UNIX for Advanced & Expert Users

unknown test operator

Hi, I have the following shell script : Nbr_BD_Link=0 Nbr_BD_Link=` sqlplus sysadm/${PSWD}@${DB_Name} << EOF | tail -4 | head -1 2>/dev/null set head off feedback off ; select count(*) from dba_db_links ; exit ; EOF ` echo ${Nbr_BD_Link} if ; then ... (4 Replies)
Discussion started by: big123456
4 Replies

10. Shell Programming and Scripting

:0: unknown test operator

I have gotten the script up to this point and it works fine a system but when i copy it to another unix server running solaris 9 as the original one , its gives an error './mon_fs.sh: 0: unknown test operator' . (see script bellow) can the Gurus see to this as i am just a beginner with... (2 Replies)
Discussion started by: ibroxy
2 Replies
Login or Register to Ask a Question