On Mon, 27 Jun 2005 [EMAIL PROTECTED] wrote:

> The following seems to work.
> 
> $ year=2005
> $ foo=$(expr $year - 1900 )
> $ dayscount=$(expr $foo \* 365 )
> $ echo $dayscount
> 38325
> 
> Problems include an unescaped asterisk
> man expr indicates that parentheses should work
>       but my playing with them seems to indicate otherwise.
> ---Correction:
> $ dayscount=$(expr \( $year - 1900 \) \* 365 )
> $ echo $dayscount
> 38325
> 
> Parens that are destined for expr instead of the shell must also be escaped.

And this is almost exaclty the sh script I sent in my reply. The
escaping of parentheses is obviously needed to avoid them being
interpreted by the shell. That is standard shell programming stuff.

And please do not toppost.

        -Otto
        
> 
> 
> 
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of
> Otto Moerbeek
> Sent: Monday, June 27, 2005 2:08 AM
> To: Peter Bako
> Cc: misc@openbsd.org
> Subject: Re: SH programming
> 
> 
> On Sun, 26 Jun 2005, Peter Bako wrote:
> 
> > Ok, so this is not really an OpenBSD question but I am doing this on an
> > OpenBSD system and I am about to lose my mind...
> >
> > I have done some basic shell scripting before but I've not had to deal
> with
> > actual integer math before and now it is killing me.  The script takes a
> > parameter in (year number) and is supposed to subtract 1900 from it and
> then
> > multiply the result by 365.  (This is part of a larger script that deal
> with
> > converting dates to a single numeric value, but this one problem is an
> > example of the problems I am having with this entire script.)  So, this is
> > what I have:
> >
> > #!/bin/sh
> > month=$1
> > day=$2
> > year=$3
> >
> > dayscount=$(expr ($year - 1900) * 365)
> > echo $dayscount
> > exit
> >
> > This will generate a "syntax error: `$year' unexpected" error.  I have
> tried
> > all sorts of variations and I am not getting it!!!  HELP!!!
> 
> When using ksh, you can do:
> 
> #!/bin/ksh
> month=$1
> day=$2
> year=$3
> 
> dayscount=$((($year - 1900) * 365))
> echo $dayscount
> exit
> 
> When using sh, you'll need expr(1), for which all parts of the
> expression are separate arguments, and you need to escape all special
> shell chars:
> 
> #!/bin/sh
> month=$1
> day=$2
> year=$3
> 
> dayscount=`expr \( $year - 1900 \) \* 365`
> echo $dayscount
> exit
> 
> > BTW, obviously I need a good book on SH programming.  Any suggestions?
> 
> For ksh, the Korn Shell Book by David Korn and (iirc Morris Bolsky)
> comes to mind.
> 
>       -Otto

Reply via email to