shell scripting while if string length != 0

Dave [Hawk-Systems] dave at hawk-systems.com
Fri Aug 1 06:08:52 PDT 2003


>I'm not a shell guru, but pipelines don't necessarily run in sequence.
>In line 5 of your script, the part that says
>
>  sed '1d' > /path/to/file_o_commands
>
>will destroy all contents of the original file. This may or may not
>happen before
>
>  cat /path/to/file_o_commands
>
>has finished reading it.

Good point. The few tests done so far appear to run as expected,  certainly not
under load of any sort though.

>If you just want to execute the lines of a file in order, use something
>like
>
>  cat file_o_commands | while read CMD ; do
>    eval $CMD
>  done

How to remove completed commands though?

>On the other hand, if you want the script to hang around at the end of
>the file and wait for new commands, you may need a named pipe (FIFO).
>This is a file that one process writes to and another one reads from,
>not necessarily at the same time.
>
>See http://www.linuxjournal.com/article.php?sid=2156 and
>http://tldp.org/LDP/lpg/node15.html for some info on these.

Not really what I was thinking of, but may be a much more eloquent solution than
an occasional cron run.  Will definately check it out, thanks.

Dave

>----- Original Message -----
>From: "Dave [Hawk-Systems]" <dave at hawk-systems.com>
>Subject: shell scripting while if string length != 0
>
>
>> for reasons best left unsaid, we need to pull in a file full of
>partial
>> commands, and run them via a shell script on occasion, removing each
>command as
>> we run it.  Have managed to hack togetherthe following shell script,
>but and
>> stumped on something simple because of my lack of shell knowledge;
>>
>> the file that holds out commands
>>   <file_o_commands>
>> Server1 df -k
>> Server2 df -k
>> Server3 top | grep myprog
>> Server4 who
>>
>> add new commands to the end of the file with
>>   echo "Server2 who" >> /path/to/file_o_commands
>>
>> then when we need to, run through the commands
>>   <file_to_run_stuff>
>> #!/bin/sh
>> # get top command
>> DOCOMMAND=`head -n 1 /path/to/file_o_commands`
>> # remove that command
>> cat /path/to/file_o_commands | sed '1d' > /path/to/file_o_commands
>> # run that command
>> ssh ${DOCOMMAND}
>>
>> this works as intended with 1 exception, we need to add a while in
>there to loop
>> through the file and stop processing an exit when `head -n 1
>> /path/to/file_o_commands` does not return a line.
>>
>> I almost want to borrow -n from if
>>
>> while [ -n (DOCOMMAND=`head -n 1 /path/to/file_o_commands`) ] do
>>  ...rest of script...
>> done
>>
>> Anyone care to enlighten me a bit?
>>
>> Dave
>>
>>
>> _______________________________________________
>> freebsd-questions at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
>> To unsubscribe, send any mail to
>"freebsd-questions-unsubscribe at freebsd.org"
>>
>
>
>




More information about the freebsd-questions mailing list