On Oct 15, 2005, at 5:59 PM, Drew Tomlinson wrote:

On 10/14/2005 3:24 PM David Kirchner wrote:


On 10/14/05, Drew Tomlinson <[EMAIL PROTECTED]> wrote:


OK, I've been working on an sh script and I'm almost there.  In the
script, I created a 'while read' loop that is doing what I want. Now I want to keep track of how many times the loop executes. Thus I included
this line between the 'while read' and 'done' statements:

count = $(( count + 1 ))

I've tested this by adding an 'echo $count' statement in the loop and it increments by one each time the loop runs. However when I attempt to
call $count in an 'echo' statement after the 'done', the variable is
null. Thus I assume that $count is only local to the loop and I have to
export it to make it available outside the loop?  What must I do?



Oh yeah, that's another side effect of using the while read method.
Because it's "| while read" it's starting a subshell, so any variables
are only going to exist there. You'd need to have some sort of 'echo'
within the while read, and then | wc -l at the end of the while loop,
or something along those lines.

The IFS method someone else mentioned, in regards to 'for' loops,
would probably be better all around. So you'd want:

OLDIFS=$IFS
# Note this is a single quote, return, single quote, no spaces
IFS='
'

for i in `find etc`
do
done

IFS=$OLDIFS



OK, I've tried this and it does fix the "count" problem. However it messes up another part of the script and I'm trying understand why. I tried to make this script dynamic in that all I would need to do is edit variables set at the top and then not have to worry about all occurrences in the script. Thus I set the following variables:

remote_pictures_dir="/multimedia/Pictures"
local_pictures_dir="/tv/pictures"
find_args="-iname '*.jpg' -or -iname '*.gif'"

Then I called the 'find' command as follows:

for original in $(/usr/bin/find $remote_pictures_dir $find_args - print)

But when I run my script, I get "/usr/bin/find: invalid predicate `- iname '*.jpg' -or -iname '*.gif''". However if I don't try and use $find_args and type the arguments in specifically, the script runs fine. I tried various combinations of quoting and escaping those quotes but can't come up with a combination that works.

What is going on? And is there some way to set verbosity so I can see how the shell is expanding the variables?

Thanks much,

Drew

IIRC, you can do that be appending a '-x' after #!/bin/sh. Your first line would look like this:

#!/bin/sh -x

This will result in the script echoing all of the commands as they're executed.

As far as the count problem, try declaring the variable before the while loop. For example:

doit = 0
count = 0
while [ $doit -lt 4 ]
do
count=$[$count+1]
doit=$[$doit+1]
done
echo $count

HTH
_______________________________________________________
Eric F Crist                  "I am so smart, S.M.R.T!"
Secure Computing Networks              -Homer J Simpson

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to