If + expr


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting If + expr
# 1  
Old 12-09-2014
If + expr

Hi

I have bellow script:

Code:
t1=`cat node1.txt | grep thread1 | cut -f2 -d '-'`
t2=`cat node2.txt | grep thread2 | cut -f2 -d '-'`

t3=`cat node1_rcat.txt | grep thread1 | cut -f2 -d '-'`
t4=`cat node2_rcat.txt | grep thread2 | cut -f2 -d '-'`

if [[ `expr $1 + $2` == `expr $3 + $4` ]]; then
echo "no restore" >> log.log
exit;
fi
echo "need restore"  >> log.log

when I execute this script I have this error:
Code:
expr: 0402-050 Syntax error.
expr: 0402-050 Syntax error.

pls help
# 2  
Old 12-09-2014
Quote:
Originally Posted by primo102
Code:
if [[ `expr $1 + $2` == `expr $3 + $4` ]]; then

I think the above should be
Code:
if [[ `expr $t1 + $t2` == `expr $t3 + $t4` ]]; then

no Smilie

$1 $2 $3 $4 are positional parameters...
# 3  
Old 12-09-2014
That would not necessarily lead to syntax errors. These are because the parameters are unset/empty. Try double quoting them whatever they are:$(expr "$t1" + "$t2").
# 4  
Old 12-09-2014
what can I say
my blunderSmilie

thanks
# 5  
Old 12-09-2014
Unrequried use of cat, and use $(expr) rather than `expr`, that is old.
Code:
t1=`cat node1.txt | grep thread1 | cut -f2 -d '-'`

becomes
Code:
t1=$(grep thread1  node1.txt | cut -f2 -d '-')

So do t2,3,4..

You could check if there less than 4 positional parameters, and exit if so (stay with 4 or more)...
Code:
[[ $# -lt 4 ]] && echo "Missing arguments..." && exit 1

Hope this helps
# 6  
Old 12-09-2014
Thank's sea, I will remove 'cat' from my script,
# 7  
Old 12-09-2014
If $t1, $t2, $t3, and $t4 expand to integer values, any shell that recognizes:
Code:
if [[ `expr $t1 + $t2` == `expr $t3 + $t4` ]]; then

should also be able to perform arithmetic expansions (which are shell built-ins) instead of invoking the expr utility twice. Try changing the above line to:
Code:
if [[ $(($t1 + $t2)) == $(($t3 + $t4)) ]]; then

If you're using a 1993 or later version of ksh, this will also work if those variables expand to floating point values.

Even if your shell doesn't support arithmetic expansions or if you're dealing with floating point values and you aren't using a recent ksh, you could get rid of one invocation of expr using:
Code:
if [[ `expr $t1 + $t2 - $t3 - $t4` == 0 ]]; then

or, preferably, the non-obsolescent form:
Code:
if [[ $(expr $t1 + $t2 - $t3 - $t4) == 0 ]]; then

If you'd show us some sample contents of your node*.txt files, we can probably also help you replace your four grep and cut pipelines with something faster.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Nn$( expr $n + 1)

HI there I am trying to understand Shell scripting to create my own, I am attempting a few examples can anyone tell me what this means?n=$( expr $n + 1)Tried looking on the internet, but just cannot find its anywhere :( .Help please (4 Replies)
Discussion started by: steve2015
4 Replies

2. Shell Programming and Scripting

Error with expr - "expr: syntax error"

Hi All, I'm writing a shell script in KSH, where I want to store the filename, total record count and actual record count of all the source files. The source files reside in 4 different sub-folders under the same root folder. Below is code: #!/usr/bin/ksh... (6 Replies)
Discussion started by: jagari
6 Replies

3. UNIX for Dummies Questions & Answers

expr ?!

Hey there i want to subtract the content from $b from $a. Each variable has got 18 values (normal numbers from 0 - 99). How can i subtract them? I know i have to use the expr command, this is what i have till now: a=`cat Tabelle.dat | awk {'print $4'} | awk -F: {'print $1'}` b=`cat... (1 Reply)
Discussion started by: Mad van Bert
1 Replies

4. Shell Programming and Scripting

the expr \*

$ cat > mtable #!/bin/sh # #Script to test for loop # # if then echo "Error - Number missing form command line argument" echo "Syntax : $0 number" echo "Use to print multiplication table for given number" exit 1 fi n=$1 for i in 1 2 3 4 5 6 7 8 9 10 do echo "$n * $i = `expr $i \*... (1 Reply)
Discussion started by: jackel7777
1 Replies

5. Shell Programming and Scripting

expr command help

I'm trying to check if a variable'd string is only one character and use that in an if statement the only way I could find is: $expr "${var}" : . # expr STRING : regrep where the "." is the grep wildcard for any single character. Whats wrong with my code here and is there a... (3 Replies)
Discussion started by: Tewg
3 Replies

6. Shell Programming and Scripting

test expr VS [ expr ]

What is the difference between test expr VS . For example : if test 5 -eq 6 echo "Wrong" and if echo "Wrong" bot will give the same output as Wrong. Now, what is the difference between these two? though they are producing the same result why we need two? Any answer will be... (2 Replies)
Discussion started by: ashok.g
2 Replies

7. Red Hat

how to use expr

i am new to shell programming, currently using redhat linux of version 2.4.20-8. i have problem in executing expr command in the following shell script $ x=5 $ x='expr $x + 1' $ echo $x the output is displaying always expr $x + 1 Pls guide me for the above query (3 Replies)
Discussion started by: saikumarm80
3 Replies

8. Shell Programming and Scripting

getting error with expr

sum=0; cat op_api2 |while read word1 word2; do echo $word2 sum=`expr $word2 + $sum`; done echo $sum op_api2 ( file has this data ) ---------------------------- UsageSummary 1034 UsageSummary 1675 UnbilledUsage 175 UnbilledUsage 177 UnbilledUsage 177 UnbilledUsage 194 I want the... (2 Replies)
Discussion started by: bishweshwar
2 Replies

9. Shell Programming and Scripting

expr problem

Hi, in my ksh script expr 22 / 10 results as 2 but the actual result expected in 2.2. how do i get that result. Please help Thanks, (2 Replies)
Discussion started by: kotasateesh
2 Replies

10. UNIX for Dummies Questions & Answers

expr

Hello! I want to evaluate some mathematical expressions in a script and I try to use 'expr' command. Unfortunatally, when I have, for example, expr 8.2 + 6 the result is 'expr: non-numeric argument' Why ? I work on SunOs 5.7. Thanks in advance Nathe (5 Replies)
Discussion started by: Nathe
5 Replies
Login or Register to Ask a Question