while loop and variables in shelll script...


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting while loop and variables in shelll script...
# 1  
Old 10-04-2002
while loop and variables in shelll script...

I'm having a problem returning variables from a loop. the variable test get incremented each time it goes through the loop but if I try to get the count after the loop has run I get 0. Can anyone explain to me why this is happening and maybe show the correct way to go about doing this?

BTW I'm using MOSX 10.2 and running the script in sh


#!/bin/sh
test=0
var="file"
ls=/bin/ls

ls | while read fn ;
do
echo $fn;
if [ $? == 0 ]; then
test=$((`expr $test + 1`))
echo $test;
fi;
done

echo $test
# 2  
Old 10-04-2002
sh is running the while loop in a subshell. Variables changed in the subshell do affect the values in the main shell.

ksh won't do that. Switch to ksh.

And ksh can increment the variable directly:
((test=test+1))

I'm not familiar with MOSX, but you have an odd version of sh if that script really runs.

You will probably need to switch the == to just = (or -eq) in your if statement. And I'm not sure why you're checking the exit code from the echo statement anyway. Are you actually finding filenames that your echo command cannot output?
# 3  
Old 10-04-2002
This is a small part of a larger script. I used the ls command to simplify the script for the purpose of solving the assignment problem.


It's just the test varible not being set by the assignments in the loop.

Is there any way to do this in sh?

Last edited by spragueg; 10-04-2002 at 01:06 PM..
# 4  
Old 01-13-2003
#!/bin/sh
counter=0
x=0
cat file | while read LINE
do
echo $LINE
let x=$x+1
echo $x (increments like it's supposed to)
done

echo the $x (returns 0)


Can someone explain how to get the variable outside the loop to refelct the variable inside the loop?
# 5  
Old 01-13-2003
Switch to a better shell. ksh will not run the inner loop in a subshell. The best anser that I can give for the old sh shell is to write the variable into a file each iteration. Once the loop is finished, read the file to set your variable. Expect that to slow down your script a lot.

Surely you have ksh or bash available. You really need to use a better shell.
# 6  
Old 01-14-2003
I believe bash is available in MOSX 10.2 by default.
But I do prefer ksh - the first software I added to my system when I got it was ksh. You can get a binary here:
http://www.research.att.com/~gsf/dow....darwin.ppc.gz
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 variables in loop

Hello, please assist: users="test1 test2" keytest1="abcd" keytest2="dbcd" for i in $users do echo "$key${i}" > fileout done So, my objective is to take the current user (ie test1) in loop and echo its associated keyname (ie keytest1) variable to a file. The echo... (2 Replies)
Discussion started by: motdman
2 Replies

2. Shell Programming and Scripting

Loop through variables

I am pretty new to Unix. Trying to pick up some slack while a coworker is out on vacation. Basically the script is working fine however when I go through the testing phase and have to make mods it is a pita. Here is an example of what I have #!/bin/ksh if then echo... (8 Replies)
Discussion started by: biobill
8 Replies

3. Shell Programming and Scripting

Need to loop three variables

Hi, I have a out from a command i need to grep a report. For that i need loop 3 variable for that. How i can loop need help. Symmetrix ID : 123456 Masking View Name : Host16 Last updated at : 04:13:06 PM on Thu Mar 17,2011 Initiator Group Name : Host16 Host... (3 Replies)
Discussion started by: ranjancom2000
3 Replies

4. Shell Programming and Scripting

for loop with 2 variables

i am having a file contants as below my requirement is for file in `awk -F "," '{print $8,$9}'` <temp.txt echo "$file" echo "$file">test.txt a=`awk -F "," '{print $1}' `<test.txt b=`awk -F "," '{print $2}' `<test.txt but script reads , i want both the vales for further... (5 Replies)
Discussion started by: sagar_1986
5 Replies

5. Shell Programming and Scripting

Help with a For loop and variables

Greetings. I'm completely new to shell scripting and quickly trying to catch on. Here's my scenario: I have a text file, named ip.txt, containing IP addresses. I want to automatically perform a whois query on each address in the file, search the output for the country, and then put both the IP... (4 Replies)
Discussion started by: molnir
4 Replies

6. Shell Programming and Scripting

Need help in for loop with 2 variables

Hi, I need help on for loop need to add domain and IP In domain list 1.com 2.com 3.com In Ip list 1.1.0.1 1.2.0.1 1.3.0.1 1.com 1.1.0.1 2.com 1.2.0.1 3.com 1.3.0.1 I need to excute this command (4 Replies)
Discussion started by: ranjancom2000
4 Replies

7. Shell Programming and Scripting

Write shelll script to read file location

hi all i have a problem how to read file location..I read file as FILE=/home/tmp/new.file.but t is not useful for me.But i want my script read file location where the file is and copy in directory at boot time. Every time of booting files are copied in respective folder.please help !!!!:) (2 Replies)
Discussion started by: shubhig15
2 Replies

8. Shell Programming and Scripting

SH: two variables in for loop

Hi, say I have a simple sh script like this: for i in a b c d do for j in 1 2 3 4 do echo "$i $j" done done and the output is a 1 a 2 a 3 a 4 b 1 (20 Replies)
Discussion started by: marcpascual
20 Replies

9. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

10. Shell Programming and Scripting

Is there a better way I could have run this loop. (For loop with two variables)

Sorry for such a dreadful title, but I'm not sure how to be more descriptive. I'm hoping some of the more gurutastic out there can take a look at a solution I came up with to a problem, and advice if there are better ways to have gone about it. To make a long story short around 20K pieces of... (2 Replies)
Discussion started by: DeCoTwc
2 Replies
Login or Register to Ask a Question