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]"