- Community Home
- >
- Servers and Operating Systems
- >
- Operating Systems
- >
- Operating System - HP-UX
- >
- Problems with or operator
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Discussions
Discussions
Forums
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 09:10 AM
тАО11-03-2009 09:10 AM
I am new to unix and trying to create a shell script.
I have problems with the or operator in if condition.
if [ $1 != Trail ] -o [ $1 != Image ]
Is that a valid syntex for ksh ?
The condition checks Trail but not for Image. I also tried with || but doent work.
Please let me know
Thanks
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 09:24 AM
тАО11-03-2009 09:24 AM
Re: Problems with or operator
if [ $1 != Trail -o $1 != Image ]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 10:43 AM
тАО11-03-2009 10:43 AM
Re: Problems with or operator
if $1=Trial then the !=Image is true, if $1=Image the !=Trail is true, if it's anything else they both return true....
or do I need more coffee????
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 11:01 AM
тАО11-03-2009 11:01 AM
Re: Problems with or operator
No OldSchool, you've got it correct as far as I can tell. Once I looked at it closer I realized the same as you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 11:43 AM
тАО11-03-2009 11:43 AM
Re: Problems with or operator
You want an 'and' in this case:
# if [ "$1" != "Trail" -a "$1" != "Image" ]; then
...
Double quoting your variables also prevents syntax errors if they are ever undefined, too.
Regards!
...JRF...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 12:50 PM
тАО11-03-2009 12:50 PM
Re: Problems with or operator
# if [ "$1" != "Trail" -a "$1" != "Image" ]; then"
Well....maybe.
You can take some actions / set of actions if $1 is not "Trail" and is not "Image", else do something else (optional).
This is the case with the test above. Had $1 been "Junk" it would have fallen thru / hit the else clause if present.
Another possibility is: you can take some actions / set of actions if $1 is *either* "Trail" or "Image", else do something else. in that case "if [ "$1" = "Trail" -o "$1 = "Image" ] ; then" would be appropriate
Depends on the OPs intent was. Since the basic logic posted was wrong, then either could apply, although I suspect that JRF has right.
You can make other cases by negating the logic to force it thru the "then" else, instead of the "else" clauses, but I'll not muddy the waters further
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 01:11 PM
тАО11-03-2009 01:11 PM
Re: Problems with or operator
"You can make other cases by negating the logic to force it thru the "then" CLAUSES, instead of the "else" clauses, but I'll not muddy the waters further
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-03-2009 03:53 PM
тАО11-03-2009 03:53 PM
Re: Problems with or operator
If you use [[ ]], you can use || and &&.
if [[ "$1" != Trail && "$1" != Image ]]; then
You can also use the shell's && or ||:
[ "$1" != Trail ] && [ "$1" != Image ] && some-command
If you have just numeric values, you can C syntax:
if (( var1 != 99 && var1 != 88 )); then
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-04-2009 01:03 AM
тАО11-04-2009 01:03 AM
Re: Problems with or operator
Happy to see many replies overnight.
Anyway. Thanks for the replies
This works finally..
if [[ "$1" != Trail && "$1" != Image ]]
The intention was I want the parameter either Trail or Image. If it is trail do something or Image do something. I thought `and` will always check both conditions.
I tried all the above solutions but getting error. However still -a should work on strings. What is the syntax using the -a? I tried all the combinations.
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО11-04-2009 02:21 AM
тАО11-04-2009 02:21 AM
SolutionNot if the first is false.
>I tried all the above solutions but getting error.
What's your error?
>However still -a should work on strings.
Yes -a works on boolean conditions.
If $1 isn't Trail nor Image, it echoes bad #.
if [ "$1" != "Trail" -a "$1" != "Image" ]; then
echo "bad 1"
fi
if [[ "$1" != Trail && "$1" != Image ]]; then
echo "bad 2"
fi
[ "$1" != Trail ] && [ "$1" != Image ] && echo "bad 3"