Logical expression in POSIX compliant Korn Shell


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Logical expression in POSIX compliant Korn Shell
# 1  
Old 02-28-2012
Logical expression in POSIX compliant Korn Shell

Hi,
i want to check if a variable var1 is not a or b or c
pseudo code:
If NOT (var1 = a or var1 = b or var1 = c)
then
...
fi

I want to use POSIX complaint Korn shell, and for string comparison
For the following code, logical.sh
Code:
#!/usr/bin/ksh
var="j"
echo "Var : $var"

if ! { [ "$var" = a ] || [ "$var" = b ] || [ "$var" = b ] ;}
then    
   echo "var not in the list"
else    
   echo "var in the list"
fi

var="b"
echo "Var : $var"

if ! { [ "$var" = a ] || [ "$var" = b ] || [ "$var" = b ] ;}
then    
   echo "var not in the list"
else    
   echo "var in the list"
fi

I gave execute permissions to the script, however it only seems to run good when run by 'sh ' and not by the script itself.
We run all our jobs without specifying 'sh ' ahead

$ chmod 777 logical.sh
$ logical.sh
Var : j
./logical.sh[3]: syntax error at line 6 : `}' unexpected
$ sh logical.sh
Var : j
var not in the list
Var : b
var in the list
$

Where am i going wrong?
Is it necessary to enclose the variable in double quotes but not the literals on the other side of comparison operator?

Thanks,
-srinivas yelamanchili
# 2  
Old 02-28-2012
Invert the logic so you don't need that ! in front.

Code:
if [ "$var" != "a" ] && [ "$var" != "b" ] && [ "$var" != "c" ]
then
...
fi

# 3  
Old 02-29-2012
Your shell may not be POSIX compliant. What ksh are you using? pdksh? On what system?
# 4  
Old 02-29-2012
The box is HP-UX 11.11

Code:
echo $SHELL

Version M-11/16/88f

$
Code:
whereis ksh

ksh: /usr/bin/ksh /usr/dt/man/man1/ksh.1 /usr/dt/share/man/man1/ksh.1 /usr/share/man/man1.Z/ksh.1

$
Code:
 ksh

Version 11/16/88

What's the latest recommended version of Korn shell (and POSIX compliant) that I can use?

Thanks,
-srinivas yelamanchili
# 5  
Old 02-29-2012
Kornshell 88 is not 100% POSIX compliant

Try to run it as sh:
Code:
#!/usr/bin/sh

# (I think it is in /usr/bin or was it #!/bin/posix/sh ??)
It will still use ksh, but it should emulate a POSIX shell...
(See man sh-posix)

---------- Post updated at 09:49 ---------- Previous update was at 09:27 ----------

I forgot, there is usually also a POSIX compliant ksh93 on HPUX:
Code:
/usr/dt/bin/dtksh

This User Gave Thanks to Scrutinizer For This Post:
# 6  
Old 02-29-2012
Thanks Scrutinizer, the dtksh helped !!!

-srinivas
# 7  
Old 02-29-2012
Good, out of interest, did you happen to try the posix shell? Did that work?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. OS X (Apple)

Generate a random number in a fully POSIX compliant shell, 'dash'...

Hi all... Apologies for any typos, etc... This took a while but it didn't beat me... Although there are many methods of generating random numbers in a POSIX shell this uses integer maths and a simple C source to create an executable to get epoch to microseconds accuracy if it is needed. I take... (8 Replies)
Discussion started by: wisecracker
8 Replies

2. Shell Programming and Scripting

Q: Is SQRT(n) possible in a POSIX compliant shell? A: Yes within limits.

Hi all... This is just a fun project to see if it is possible to get a square root of a positive integer from 1 to 9200000 to 6 decimal places on a 64 bit architecture machine. It is coded around dash and the results show the values from 0 to 10000. Complex numbers can easily be catered for by... (3 Replies)
Discussion started by: wisecracker
3 Replies

3. Shell Programming and Scripting

Equivalent to let command in POSIX shell

Hi all, I am learning POSIX shell programming, and the book I read, uses the let command for integer arithmetic. I have downloaded and use the shellcheck program on Linux. This programs says: In POSIX sh, 'let' is undefined. See the screenshot attached. What is the POSIX... (1 Reply)
Discussion started by: johnprogrammer
1 Replies

4. Shell Programming and Scripting

Pure POSIX shell scripting...

Hi all... This is more of a concensus question than help... As many of you know I am experimenting with the limitations of Pure POSIX shell scripting. Q: Is the directory /bin considered part of the Pure POSIX shell or must I stick entirely with the builtins only? The reason is I... (2 Replies)
Discussion started by: wisecracker
2 Replies

5. Shell Programming and Scripting

Is Rule 7 of POSIX shell grammar rules written correctly?

The POSIX shell standard grammar rules are at Shell Command Language I am trying to understand Rule 7 and I don't. I think there may be some mistakes there. I am not complaining about the standard; rather, I am concerned that my perception is wrong, and I don't understand something important.... (3 Replies)
Discussion started by: Mark_Galeck
3 Replies

6. UNIX for Dummies Questions & Answers

Logical OR in shell script

I have code as follows to perform some validations on C++ and Javascript files: if || || ; then However, when I want to add other extensions as well, say "py" or "sql", then the repeated OR starts to look contrived. I know I can use the -o operator to abbreviate the code a little bit, but... (14 Replies)
Discussion started by: figaro
14 Replies

7. Shell Programming and Scripting

Command substitution inside of a variable expression (AIX, KORN)

Hello all. This is my first post/question on this site. I’m a new Systems Analyst with previous experience with BASH. Although now I'm using AIX, and I’m trying to get a feel for the Korn shell (for those of you that don’t know AIX only uses the KORN shell). I hope I put this into the correct... (10 Replies)
Discussion started by: sydox
10 Replies

8. Shell Programming and Scripting

nested logical expression in bash shell

Please tell me how to nest logical expressions in bash. I would like to nest logical expressions for arguments of the "test" command on bash. The following pseudo-code shows my intention. // pseudo code if (exp1 AND (exp2 OR exp3)) { Output true; } else { Output false; } ... (11 Replies)
Discussion started by: LessNux
11 Replies

9. Shell Programming and Scripting

Using Logical Expression in an AWK statement

I'm would to create a script that would give me the results below. Please note the spaces in the log file are actually commas(",".) Log file Data 0:00 21:15 899 43 31 12 25.39 0:00 21:20 736 34 19 15 35.39 0:00 21:20 776 41 28 13 ... (3 Replies)
Discussion started by: ravzter
3 Replies

10. Shell Programming and Scripting

Logical AND in shell commands

Hi:confused:, I have a file that contains : +-----------------------------------------------------------------------------+ LABEL: super1_fix EFIX FILES: 1 ABSTRACT: epkg for touch command PRE-REQUISITES: no PACKAGER VERSION: 7 REBOOT REQUIRED: no BUILD BOOT... (4 Replies)
Discussion started by: vijaya2006
4 Replies
Login or Register to Ask a Question