how to code a timer loop in a sh script
Polytropon
freebsd at edvax.de
Wed Nov 8 13:42:34 UTC 2017
On Wed, 8 Nov 2017 13:23:14 +0000, Arthur Chance wrote:
> On 08/11/2017 12:56, Polytropon wrote:
> > On Wed, 8 Nov 2017 08:25:55 +0100 (CET), Trond Endrestøl wrote:
> >> On Mon, 6 Nov 2017 19:24+0100, Michael Schuster wrote:
> >>
> >>> while [ 1 ]; do
> >>> do_stuff
> >>> sleep 600
> >>> done
> >>
> >> This should be even better:
> >>
> >> while true; do
> >> do_stuff
> >> sleep 600
> >> done
> >
> > Yes.
> >
> > While /usr/bin/true always evaluates to true (as desired),
> > "test 1" depends on if it's an internal or external command
> > which depends on the shell, and if the implementation conforms
> > to the standard. In this specific case, 1 would be seen as "1",
> > a non-empty string, and therefore should cause test to return 0,
> > as a non-empty string evaluates to true.
> >
> > From "man test":
> >
> > string True if string is not the null string.
> >
> > As the 1 is the only expression tested, this rule applies.
> > No math included. ;-)
>
> A minor point: in /bin/sh "true" and "test" are builtins (with synonyms
> ":" and "[" respectively). true (and :) don't need to test anything, so
> shave microseconds off the 10 minute sleep cycle. :-)
That's correct (at least in FreeBSD's /bin/sh; other implementations
might not have those as builtins - in case script portability should
be important here). I still agree with you that true or : aren't as
"heavy on resources" as test (either as builtin or external program
call); as if anyone cares for efficiency today... ;-)
--
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...
More information about the freebsd-questions
mailing list