(This message will disappear, once this node revised.)
Radtest provides two kinds of conditional statements:
if and case.
An if statement in its simplest form is:
if cond stmt
where cond is a conditional expression and stmt is a
valid radtest statement. Optional newline may be inserted
between cond stmt.
In this form, if evaluates the condition and if it yields true,
executes the statement. For example:
if $REPLY[NAS-IP-Address] = 127.0.0.1 print "Request from localhost"
More complex form of this statement allows to select between the two statements:
if cond stmt-1 else stmt-2
Here, stmt-1 will be executed if cond evaluates to true, and stmt-2 will be executed if cond evaluates to false.
Notice, that an optional newline is allowed between cond and
stmt-1 and right after else keyword. However, a newline
before else constitutes an error.
If several statements should be executed in a branch of the if
statement, use compound statement as in the example below:
if $REPLY_CODE != Accounting-Response begin print "Accounting failed.\n" exit 1 end else print "Accounting succeeded.\n"
If statements can be nested to any depth.
Case statement allows select a statement based on whether
a string expression matches given regular expression. The
syntax of case statement is:
case expr in expr-1 ) stmt-1 expr-2 ) stmt-2 … expr-n ) stmt-n end
where expr is a control expression, expr-1, expr-2 etc. are expressions evaluating to extended POSIX regular expressions (for the detailed description of these see (regex)Top section `Regular Expression Library' in Regular Expression Library).
Case statement first evaluates expr and converts it to
string data type. Then it evaluates each expr-n in turn
and tests if the resulting regular expression matches expr. If
so, the statement stmt-n is executed and the execution of
case statement finishes.
The following example illustrates the concept:
case $COMMAND in "auth.*") authenticate($LIST, no) "acct") authenticate($LIST, yes) ".*") begin print "Unknown command." exit 1 end end
Bourne shell programmers should notice that:
Case statement ends with end, not esac.
;; at the end of each branch,
This document was generated by Sergey Poznyakoff on December, 6 2008 using texi2html 1.78.