Written by Christer Hermansson on 08/18/07 18:08>>
Derek Ragona wrote:
At 12:04 PM 8/18/2007, Christer Hermansson wrote:
I also found some basic example at http://www.grymoire.com/Unix/Sh.html#uh-88 :

--------8<--------8<--------8<--------8<--------8<--------

#!/bin/sh

echo "Type in a number"
read ans
number=`expr "$ans" : "([0-9]*)"`
if [ "$number" != "$ans" ]; then
echo "Not a number"
elif [ "$number" -eq 0 ]; then
echo "Nothing was typed"
else
echo "$number is a fine number"
fi

--------8<--------8<--------8<--------8<--------8<--------

The above example doesn't work on my freebsd box. Maybe I need to update my system, sitting with 6.0R which never been updated.


You have a syntax error using expr. Do a man on expr for more details but if you change that line from:
number=`expr "$ans" : "([0-9]*)"`
to:
number=`expr "$ans" : "\([0-9]*\)"`

You will get the desired results.

Also when debugging scripts remember to add:
set -x
to your script on the second line, and see what the script lines are actually doing.

        -Derek

Thanks Derek ! Now both the example and my own code works for me. I changed my code from "^[A-Za-z0-9_-]+$" to "\([A-Za-z0-9_-]*\)" It seems that FreeBSD's expr want some different syntax than the webbased test tool at http://regexlib.com/RETester.aspx


No, your expression is double quoted, which means the shell will expand it before passing it to expr. Parens are expanded by shells, they manipulate the order of operations (i.e. 'echo 1 || echo 2 && echo 3' vs. '(echo 1 || echo 2) && echo 3'). As a result, you must escape the parens or the shell will gobble them up.
_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to