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. -----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