while loop not taking the not equal to condition


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers while loop not taking the not equal to condition
# 1  
Old 08-07-2008
while loop not taking the not equal to condition

Hi
I am trying to write a code like this
echo "enter a type"
read a_type
while [ $a_type != "S" ] || [ "$a_type" != "s" ] || [ "$a_type" != "SR" ] || [ "$a_type" != "sr" ] || [ "$a_type" != "a" ] || [ "$a_type" != "A" ]
do
echo "invalid engine type Please enter correct a_type"
read engine_type < /dev/tty
done

My problem is that even if i give the a_type as the correct one that i have listed above that is S or s so on and so forth it is still entering in the loop and telling invalid a_type
Instead if i give = condition in while it is working fine . That is if i give while [ $a_type = "S" ] then if i give S it is entering and not S it is not entering . But giving = dosent satisfy my code . I have to give not equal to if i want the code to work
Please help
Thanking in advance
# 2  
Old 08-07-2008
Question perhaps it is the logic?

You have or between each. I think you may want and logic.

simplified coding:
Code:
Enter a code
read ans
if [ $ans != "s" ] || [ $ans != "S" ]
 then
 echo "no more"
fi

Thus, enter "s"
if [ s != "s" ] || or [ s != "S" ]
becomes
if [ 0 ] || [ 1 ]
which is a 1

Often, when doing multiple conditions, != is with or while = is with and.
Thus, perhaps better if
Code:
if [ $ans != "s" ] && [ $ans != "S" ]

# 3  
Old 08-07-2008
Might be clearer to change it from negative to positive logic by using until, and use expr to shorten the code a little:

Code:
echo "enter a type"
read a_type
until expr "$a_type" : "[SsAa]" || expr "$a_type" : "[Ss][Rr]"
do
        echo "invalid engine type Please enter correct a_type"
        read a_type < /dev/tty
done

Or use grep:

Code:
echo "enter a type"
read a_type
until echo "$a_type" | grep -Eixq "[sa]|sr"
do
        echo "invalid engine type Please enter correct a_type"
        read a_type < /dev/tty
done

# 4  
Old 08-08-2008
Thank you

Thank you all for helping me out mine was a just logic problem Smilie
# 5  
Old 08-08-2008
I have another question related to my question posted yesterday

while [ "$engine_type" != "S" ] && [ "$engine_type" != "s" ] && [ "$engine_type" != "SR" ] && [ "$engine_type" != "sr" ] && [ "$engine_type" != "a" ] && [ "$engine_type" != "A" ]

is working fine
but how to short cut it say i mean the user can enter S or s A or a or Sr rS like that
writing everything in while makes it cumbersome
Is there any other way
Thanks in advance
# 6  
Old 08-08-2008
I thought I already answered that question??
# 7  
Old 08-08-2008
To be honest i think you should change your programs logic completely: You enter a character (or word), some values are legal, ALL others are not. You do not need the functionality of a while-loop at all, so why should you use it?

How about the following, which is easily extensible:

Code:
print - "enter a value: " ; read value
case value in
     [Ss])
          print - "You entered an s or an S."
          ;;

     [Nn])
          print - "You entered an n or an N."
          ;;

     *)
          print - "You entered an illegal value"
          ;;
esac

This should also be easier to read and to maintain.

If you want to use the code part as a device to process the commandline you could also resort to the getopts-program. Have a look at the manpage for it and if this fits your requirements and you still have problems applying it come back and ask again.

I hope this helps.

bakunin
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with taking variable of for loop in textfile

Hi, I am new to unix/linux scripting. I have a text file, listlib.txt where the content: lib1_23 lib34_a ab_li_lab I need to generate a file (.log) of each cell. I am planning to create a (.csh) script that will have for loop with variable taken from listlib.txt. As for now, i have no... (4 Replies)
Discussion started by: mmaz
4 Replies

2. Shell Programming and Scripting

While loop problem taking too long

while read myhosts do while read discovered do echo "$discovered" done < $LOGFILE | grep -Pi "|" | egrep... (7 Replies)
Discussion started by: SkySmart
7 Replies

3. Shell Programming and Scripting

grep not equal to condition

I have below files under dir_a and dir_b and i want to sort out number of dir_a and dir_b files seperately and if i do the grep it should retrun 2 files in dir_a and 1 file in dir_b. /dir_a/12345678 /dir_a/87654321 /dir_a/dir_b/12345687 But i am getting cat file|grep dir_a|wc -l 3... (6 Replies)
Discussion started by: prash358
6 Replies

4. Shell Programming and Scripting

If not equal to then loop

How do I go about amending this simple script that prompts for a yes/no response so that if neither Y or N are entered it will loop back back to the original prompt #!/bin/ksh echo "Enter yes of no" read answer if then echo "You selected yes" elif then echo "You selected no" elif... (5 Replies)
Discussion started by: gmears
5 Replies

5. Shell Programming and Scripting

Use of -z in while loop condition

Hi, Could you please tell what is the meaning of -z in while loop condition. For example, while ; do echo "*** Enter the age " readage (3 Replies)
Discussion started by: vidyaj
3 Replies

6. Shell Programming and Scripting

if condition in a while loop

Gurus, I need to read a line from a file and strip the characters from it and compare the stripped value with the value I pass to the script while executing it. Below is the code for the same. But when i execute the code, it is throwing an error. #!/bin/ksh . /home/.i_env ... (14 Replies)
Discussion started by: svajhala
14 Replies

7. UNIX for Advanced & Expert Users

Comparison and For Loop Taking Too Long

I'd like to 1. Check and compare the 10,000 pnt files contains single record from the /$ROOTDIR/scp/inbox/string1 directory against 39 bad pnt files from the /$ROOTDIR/output/tma/pnt/bad/string1 directory based on the fam_id column value start at position 38 to 47 from the record below. Here is... (1 Reply)
Discussion started by: hanie123
1 Replies

8. Shell Programming and Scripting

For Loop Taking Too Long

I'm new from UNIX scripting. Please help. I have about 10,000 files from the $ROOTDIR/scp/inbox/string1 directory to compare with the 50 files from /$ROOTDIR/output/tma/pnt/bad/string1/ directory and it takes about 2 hours plus to complete the for loop. Is there a better way to re-write the... (5 Replies)
Discussion started by: hanie123
5 Replies

9. Solaris

Infinite for loop is taking too much CPU usage %

Hi All, I wrote one simple for loop shell script which prints number..but this loop is infinite...but its taking lot of CPU (15.7) %. if i am using sleep cmd then cpu usage become 0.4 %. Is there anyway to reduce this CPU usage without using sleep cmd? i dont want 2 use sleep cmd... (7 Replies)
Discussion started by: pa.chidhambaram
7 Replies

10. Shell Programming and Scripting

Problem taking input from file with for loop

I am trying to take input from a file and direct it into a bash script. This script is meant to be a foreach loop. I would like the script to process each item in the list one by one and direct the output to a file. # cat 1loop #!/bin/bash # this 2>&1 to redirect STDERR & STDOUT to file... (4 Replies)
Discussion started by: bash_in_my_head
4 Replies
Login or Register to Ask a Question