Help Understanding While Loop
Drew Tomlinson
drew at mykitchentable.net
Sat Oct 15 15:59:34 PDT 2005
On 10/14/2005 3:24 PM David Kirchner wrote:
>On 10/14/05, Drew Tomlinson <drew at mykitchentable.net> 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
--
Visit The Alchemist's Warehouse
Magic Tricks, DVDs, Videos, Books, & More!
http://www.alchemistswarehouse.com
More information about the freebsd-questions
mailing list