optimize if block : shell script


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers optimize if block : shell script
# 1  
Old 08-22-2012
MySQL optimize if block : shell script

Hi,

I need a shell script to determine if a no. is either even, greater than 4, less than 8
SHELL : ksh
OS : RHEL 6
this is the if block of the script

Code:
 
mod=`expr $num % 2`
if [ "$mod" -eq 0 ] || [ "$num" -gt 4 ] || [ "$num" -le 8 ]
then
      echo "No. is either even or greater than 4 or less than 8"
fi

this code works fine,
however i want to find out which test block(s) of the conditions in if is having true value and take action on according to the result

for this the if block i have designed is quite cumbersome and not at all optimized pair of if-elif-else blocks,

Code:
 
mod=`expr $num % 2`
flag1=0
flag2=0
if [ "$mod" -eq 0 ] 
then
      echo "No. is even"
      flag1=0
fi
 
if [ "$num" -gt 4 ] && [ "$flag1" -eq 1 ]
then
      echo "No. is even and greater than 4"
      flag2=0
elif [ "$num" -gt 4 ]
then
      echo "No. is greater than 4"
      flag2=0
fi
 
if [ "$num" -lt 8 ] && [ "$flag2" -eq 0 ]
then
      echo "No. is even greater than 4 and less than 8"
elif [ "$num" -lt 8 ] && [ "$flag1" -eq 0 ]
then
      echo "No. is even and less than 8"
else
      echo "No. is less than 8"
fi

can anyone suggest any way to optimize this ?

Thanks
# 2  
Old 08-22-2012
Your logic has problems. I preserved the bad logic in this code
Code:
#!/bin/ksh
num=$1
mod=`expr $num % 2` 
result=0                                            
[ $mod -eq 0 ] && result=1 
[[ $result -eq 0 &&  $num -gt 4  ]] && result=2 
[[ $result -eq 0 &&  $num -lt 8  ]] && result=3     
if [ $result -gt 0 ] 
then                                     
      echo "No. is either even or greater than 4 or less than 8"
      echo "result is $result"
fi

If you test for > 4 and set result to 2 you never get a result for less than 8.
Did you mean > 4 and <= 8? rather than just > 4?

You can change the code to fit your requirements.
# 3  
Old 08-22-2012
You could also use the binary numbers to represent the results of your tests. Think permissions on UNIX:
Code:
7 == rwx = 100 + 010 +001

Just keep prepending 0 or 1 to the flag:
Code:
#!/bin/ksh

num=$1

cat <<EOF

111
││└── is even
│└─── is > 4 
└──── is <= 8

EOF

[[ $(($num % 2)) -eq 0 ]] && a=1 || a=0
[[ $num -gt 4 ]] && a=1$a || a=0$a
[[ $num -le 8 ]] && a=1$a || a=0$a

echo $a

Code:
$ ./test.ksh 7
111
││└── is even
│└─── is > 4 
└──── is <= 8

110

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help Optimize the Script Further

Hi All, I have written a new script to check for DB space and size of dump log file before it can be imported into a Oracle DB. I'm relatively new to shell scripting. Please help me optimize this script further. (0 Replies)
Discussion started by: narayanv
0 Replies

2. Shell Programming and Scripting

Optimize shell script to run faster

data.file: contact { contact_name=royce-rolls modified_attributes=0 modified_host_attributes=0 modified_service_attributes=0 host_notification_period=24x7 service_notification_period=24x7 last_host_notification=0 last_service_notification=0 host_notifications_enabled=1... (8 Replies)
Discussion started by: SkySmart
8 Replies

3. Shell Programming and Scripting

Optimize my mv script

Hello, I'm wondering if there is a quicker way of doing this. Here is my mv script. d=/conversion/program/out cd $d ls $d > /home/tempuser/$$tmp while read line ; do a=`echo $line|cut -c1-5|sed "s/_//g"` b=`echo $line|cut -c16-21` if ;then mkdir... (13 Replies)
Discussion started by: whegra
13 Replies

4. Shell Programming and Scripting

Delete unique rows - optimize script

Hi all, I have the following input - the unique row key is 1st column cat file.txt A response C request C response D request C request C response E request The desired output should be C request (7 Replies)
Discussion started by: varu0612
7 Replies

5. Emergency UNIX and Linux Support

Help to optimize script running time

Dear Forum experts I have the below script which I made to run under bash shell, it runs perfectly for low records number, let us say like 100000. when I put all records (3,000,000), it's takes hours can you please suggest anything to optimize or to run in different way :-| {OFS="|";... (6 Replies)
Discussion started by: yahyaaa
6 Replies

6. Shell Programming and Scripting

Optimize shell code

#!/usr/bin/perl use strict; use warnings; use Date::Manip; my $date_converted = UnixDate(ParseDate("3 days ago"),"%e/%h/%Y"); open FILE,">$ARGV"; while(<DATA>){ my @tab_delimited_array = split(/\t/,$_); $tab_delimited_array =~ s/^\ =~ s/^\-//; my $converted_date =... (2 Replies)
Discussion started by: sandy1028
2 Replies

7. Shell Programming and Scripting

Optimize and Speedup the script

Hi All, There is a script (test.sh) which is taking more CPU usage. I am attaching the script in this thread. Could anybody please help me out to optimize the script in a better way. Thanks, Gobinath (6 Replies)
Discussion started by: ntgobinath
6 Replies

8. UNIX for Dummies Questions & Answers

optimize shell script (snapshots)

I've a script to do some snapshots but the time it does so is very different... once i got a snapshot under 1 sec, on the other hand it took 3 sec, but nothing else changed, i didnt even move the cursor or something. I put the script on a ramdisk and its faster, but still swing from under 1... (1 Reply)
Discussion started by: mcW
1 Replies

9. UNIX for Dummies Questions & Answers

Can we optimize this simple script ?

Hi All , I am just a new bie in Unix/Linux . With help of tips from 'here and there' , I just created a simple script to 1. declare one array and some global variables 2. read the schema names from user (user input) and want2proceed flag 3. if user want to proceed , keep reading user... (8 Replies)
Discussion started by: rajavu
8 Replies

10. Shell Programming and Scripting

optimize the script

Hi, I have this following script below. Its searching a log file for 2 string and if found then write the strings to success.txt and If not found write strings to failed.txt . if one found and not other...then write found to success.txt and not found to failed.txt. I want to optimize this... (3 Replies)
Discussion started by: amitrajvarma
3 Replies
Login or Register to Ask a Question