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