Can we optimize this simple script ?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Can we optimize this simple script ?
# 1  
Old 01-13-2009
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 input schema name
4. exit the loop if user doesn't want to proceed or it reaches Maximum schema numbers (3)
5 assigns the arrays to global variable only if arrays are not null

Code:
[orcl10gdb@SVRDELLD41 schema_opt]$ cat test_while_array.sh
#declares Array and global variables
declare -a arry
cnt=0
i=0
schema1=""
schema2=""
schema3=""

# Reads schemaname and wanttoproceed flag and exit on reachig maximum schema numbers (3)
echo "Enter Schema Name 1 :"
while read schemaname
do
        arry[cnt]=$schemaname

        echo "Want to procede (y/n) :"
                read wnt2prc
                if [ $wnt2prc = "n" ];
                then
                  break
                fi

        cnt=`expr $cnt + 1`

                if [ $cnt -gt 2 ];
                then
                  echo "Maximum schema number (3) Reached"
                  break
                fi
echo "Enter Schema Name `expr $cnt + 1`:"
done

#Assigns schema names to global variables only if Not Null
if [ -n ${arry[0]} ];
then
        schema1=${arry[0]}
fi

if [ -n ${arry[1]} ];
then
        schema2=${arry[1]}
fi

if [ -n ${arry[2]} ];
then
        schema3=${arry[2]}
fi

#echos then schema name
echo 'schema 1 '$schema1 ${arry[0]}
echo 'schema 2 '$schema2 ${arry[1]}
echo 'schema 3 '$schema3 ${arry[2]}


#while [ $i -lt $cnt ]
#do
#i=`expr $i + 1`
# Calls other sripts with arry as parameter
#done
[orcl10gdb@SVRDELLD41 schema_opt]$ sh test_while_array.sh
Enter Schema Name 1 :
schm1
Want to procede (y/n) :
y
Enter Schema Name 2:
schm2
Want to procede (y/n) :
n
schema 1 schm1 schm1
schema 2 schm2 schm2
schema 3
[orcl10gdb@SVRDELLD41 schema_opt]$

This work fine up to this stage . But wants to know any thing could be done to optimize the script or to make the script compact.

And Now I am planning to call other shell scripts with parameter as array value. Its template is also given in the above script .

The basic questions are , Is there any ..

1. change could be done to optimize the script or to make it compact ?
2. function to change the case of input schema name ?
3. technique to validate user input flag (y/n)
4. make the echo and input in the same line.

Any help is appreciated.
# 2  
Old 01-13-2009
#1 Why use schema1 schema2, etc? Why not use arry[0], arry[1]? The concept of "global" variables in shell scripting doesn't make much sense.

#2 schema1=`echo $arry[0] | tr 'A-Z' 'a-z'`

#3 Validating user input. You can do:
Code:
  answer=""
  while [ "$answer" != "n" ]; do 
    echo -n "PRoceed ? Y/N"; read answer
  done

#4 See if "read" allows the -p parameter, as does bash.
# 3  
Old 01-13-2009
Thanks very much otheus ,


I got some new tips today especially points 2 and 4 . I almost incorporated your suggestion . Its fine now.

Code:
[orcl10gdb@SVRDELLD41 schema_opt]$ cat test_while_array.sh
#declares Array and global variables
declare -a arry
cnt=0
i=0
schema1=""
schema2=""
schema3=""

# Reads schemaname and wanttoproceed flag and exit on reachig maximum schema numbers (3)

while read -p  "Enter Schema Name `expr $cnt + 1` :" schemaname
do
        arry[cnt]=$schemaname

             wnt2prc=""
             while [ "$wnt2prc" != "n" ] && [ "$wnt2prc" != "y" ]
             do
                read -p "Want to procede (y/n) :" wnt2prc
             done

                cnt=`expr $cnt + 1`
                if [ $wnt2prc = "n" ] || [ $cnt -gt 2 ]
                then
                  if [ $cnt -gt 2 ]
                  then
                    echo "Maximum schema number (3) Reached"
                  fi
                break
                fi

done

#Assigns schema names to global variables only if Not Null
if [ -n ${arry[0]} ];
then
        schema1=`echo ${arry[0]} | tr 'a-z' 'A-Z'`
fi

if [ -n ${arry[1]} ];
then
        schema2=`echo ${arry[1]} | tr 'a-z' 'A-Z'`
fi

if [ -n ${arry[2]} ];
then
        schema3=`echo ${arry[2]} | tr 'a-z' 'A-Z'`
fi

#echos then schema name
echo 'schema 1 '$schema1 ${arry[0]}
echo 'schema 2 '$schema2 ${arry[1]}
echo 'schema 3 '$schema3 ${arry[2]}


#while [ $i -lt $cnt ]
#do
#i=`expr $i + 1`
# Calls other sripts with arry as parameter
#done
[orcl10gdb@SVRDELLD41 schema_opt]$ sh test_while_array.sh
Enter Schema Name 1 :schm1
Want to procede (y/n) :a
Want to procede (y/n) :b
Want to procede (y/n) :y
Enter Schema Name 2 :schm2
Want to procede (y/n) :n
schema 1 SCHM1 schm1
schema 2 SCHM2 schm2
schema 3
[orcl10gdb@SVRDELLD41 schema_opt]$

But still have some doubts .

there is a section

Code:
   while [ "$wnt2prc" != "n" ] && [ "$wnt2prc" != "y" ]
    do
        read -p "Want to procede (y/n) :" wnt2prc
    done

But when I change to following (removing quotes )

Code:
 while [ $wnt2prc != "n" ] && [ $wnt2prc != "y" ]

Its giving me error

Code:
  [: !=: unary operator expected

Why it is ?
But another section in the existing code

Code:
 
if [ $wnt2prc = "n" ] || [ $cnt -gt 2 ]

Work well even without quotes !!!!!

Raj
# 4  
Old 01-13-2009
The shell expands variables (preceded by $) before running the command "[" -- yes, that's right, "[" is a command! If the variable was the empty string, the [ command sees != followed by "n" and never sees the "left hand side" of the argument. So you put it in quotes. Now if the variable is NOT empty, the command works perfectly. Your while loop guarantees the variable will contain something -- either a y or n, so the second instance of [ will always have a y or n after it.
# 5  
Old 01-13-2009
Ok .. If i understand it correctly ,

It is recommended always to use the variable with quotes especially during comparison to avoid such errors . Am I right ?

Thanx otheus again.

Learned some more tips Smilie

Raj.
# 6  
Old 01-13-2009
Quote:
Originally Posted by rajavu
It is recommended always to use the variable with quotes especially during comparison to avoid such errors . Am I right ?
Pretty much, though analytically, you can see that the variable will contain something. However, someone can change the code that breaks that condition.... so better to always quote.

You can also do this trick, often seen in older scripts:
Code:
if [ x$var = x ];then ....

while [ ${answer}x = Yx ]; then ....

Instead of quoting the variable, you pre- or postfix something to it AND the thing you compare it to.
# 7  
Old 01-13-2009
Thanks very much again for the lightening response .

Shell script sees to be interesting .
But still much difficult section AWK programming , though I am not pretty comfortable with normal shell script.
I am going to get stick on on to it .

The support from the sites like Unix.com may take me to the top of it Smilie

Raj
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Simple script for resize, crop and optimize jpg

Hi Friends, I'm trying to create a script that allows me to recursively resize, crop (holding the center of the image) and optimize images jpg, jpeg, png for a specific folder and subfolder with the ability to exclude certain folder and its subdirectory. Again, I should to do with this script:... (3 Replies)
Discussion started by: danjde
3 Replies

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

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

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

5. UNIX for Dummies Questions & Answers

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 mod=`expr $num % 2` if || || then echo "No. is either even or greater than 4 or less than 8" fi this code works... (2 Replies)
Discussion started by: sam05121988
2 Replies

6. Shell Programming and Scripting

Can someone please help me optimize my code (script searches subdirectories)?

Here is my code. What it does is it reads an input file (input.txt which contains roughly 2,000 search phrases) and searches a directory for files that contains the search phrase. The directory contains roughly 1900 files and 84 subdirectories. The output is a file (output.txt) that shows only the... (23 Replies)
Discussion started by: jl487
23 Replies

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

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

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

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