Logical OR in shell script


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Logical OR in shell script
# 1  
Old 10-31-2014
Logical OR in shell script

I have code as follows to perform some validations on C++ and Javascript files:
Code:
if [ "$ext" -eq "cpp" ] || [ "$ext" -eq "h" ] || [ "$ext" -eq "js" ]; 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 isn't there a more terse way to perform checks like these? Perhaps a standard membership-of-array function?

Last edited by figaro; 10-31-2014 at 08:14 PM.. Reason: Replaced $# with $ext
# 2  
Old 10-31-2014
The || represents an unconditional else of an if block.
Use OR instead.

Anyhow.. in your case i'd suggest a case block..
Code:
ext=h
case $ext in
cpp|h|js)   echo "Do this" ;;
ph|php|lua) echo "Do that" ;;
*) echo "Do anything else" ;;
esac

Hope this helps
These 2 Users Gave Thanks to sea For This Post:
# 3  
Old 10-31-2014
Look up table?

Code:
declare -a lang=(cpp sql js h py)
if [[ ${lang[@]} =~ "$ext" ]]; then

By the way, `-eq' is for integers; for string `=' is the operator

Last edited by Aia; 10-31-2014 at 09:53 PM..
# 4  
Old 10-31-2014
@aia that is not a lookup table, this is matching of strings, the first string being "${lang[@]}", which will evaluate to "cpp sql js h py" :
Code:
$ ext=pp
$ if [[ ${lang[@]} =~ "$ext" ]]; then echo hello; fi
hello

"Hello" gets printed, but "pp" is not one of the values.



--
This is string matching and not regex matching BTW, since the right hand side is quoted.

Last edited by Scrutinizer; 10-31-2014 at 10:29 PM..
# 5  
Old 10-31-2014
I see what you mean

---------- Post updated at 08:22 PM ---------- Previous update was at 07:20 PM ----------

A possible solution to the bug:

Code:
declare -a lang=(cpp sql js h)
if [[ ${lang[@]} =~ $(echo "\<${ext}\>") ]]; then

But that takes the simplicity I was looking for, so meh!
# 6  
Old 11-01-2014
But that is not working either?
Code:
$ ext=cpp; if [[ ${lang[@]} =~ $(echo "\<${ext}\>") ]]; then echo hello; fi
$

# 7  
Old 11-01-2014
Quote:
Originally Posted by Scrutinizer
But that is not working either?
Code:
$ ext=cpp; if [[ ${lang[@]} =~ $(echo "\<${ext}\>") ]]; then echo hello; fi
$

It is working at this end
Code:
$ cat show_ext.sh 
#!/bin/bash

ext=cpp
declare -a extentions=(cpp sql js h)
if [[ ${extentions[@]} =~ $(echo "\<${ext}\>") ]]; then
    echo Hello $ext
fi

ext=pp
declare -a extentions=(cpp sql js h)
if [[ ${extentions[@]} =~ $(echo "\<${ext}\>") ]]; then
    echo Hello $ext
fi

$ bash show_ext.sh 
Hello cpp

$ bash --version
bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to write config shell script to pass variables in master shell script?

Dear Unix gurus, We have a config shell script file which has 30 variables which needs to be passed to master unix shell script that invokes oracle database sessions. So those 30 variables need to go through the database sessions (They are inputs) via a shell script. one of the variable name... (1 Reply)
Discussion started by: dba1981
1 Replies

2. UNIX for Dummies Questions & Answers

How to write Config shell script to pass variables in master shell script?

Dear Unix gurus, We have a config shell script file which has 30 variables which needs to be passed to master unix shell script that invokes oracle database sessions. So those 30 variables need to go through the database sessions (They are inputs) via a shell script. one of the variable name... (1 Reply)
Discussion started by: dba1981
1 Replies

3. Shell Programming and Scripting

Unable to pass shell script variable to awk command in same shell script

I have a shell script (.sh) and I want to pass a parameter value to the awk command but I am getting exception, please assist. diff=$1$2.diff id=$2 new=new_$diff echo "My id is $1" echo "I want to sync for user account $id" ##awk command I am using is as below cat $diff | awk... (2 Replies)
Discussion started by: Ashunayak
2 Replies

4. Shell Programming and Scripting

Shell grammar question: logical OR in test

Hi, I am trying to check if two input files exist before the rest of the scripts is run. Following is the code that I have but it gives me syntax error. if then echo "File not found" else echo "File found" fi (3 Replies)
Discussion started by: nua7
3 Replies

5. Shell Programming and Scripting

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 #!/usr/bin/ksh var="j" echo "Var : $var" if ! { || ||... (12 Replies)
Discussion started by: ysrini
12 Replies

6. Shell Programming and Scripting

SH Script for Logical OR function

Using good ole fashion bourne shell scripting I have to take 2 files and compare them 1:1 in a Logical OR "gate" or function and then output the info into a 3rd file. I have never tried anything like this before :eek: so any hand holding will be much "Thanked" OR Gate being: A, B, Result 0,... (2 Replies)
Discussion started by: Alivadoro
2 Replies

7. 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

8. Shell Programming and Scripting

How to implement the logical express --- A(B+C) within single "if" statment in shell script?

On Linux OS, bash environment, I want implement the following code: if && ( || ) A,B,C represents some compare conditions. How to realize it ? Thanks! (1 Reply)
Discussion started by: qcmao
1 Replies

9. 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

10. Shell Programming and Scripting

How to do logical AND and logical OR with grep

Hi can someone please help me on this. I need to perform this code: Grep any lines that meets the following criteria (A AND B) OR (A AND C) I tried this code, but it didn't work Grep-I "A &&B" | "A&&C" *.* $ thanks in advance (12 Replies)
Discussion started by: Needhelp2
12 Replies
Login or Register to Ask a Question