Continue an SFK script at a different point, or stop the script due to a condition with sfk if.

sfk ... +if [opts] expression command1 ... +command2
sfk ... +if ... [+]begin ... +elseif ... +else ... +endif

execute command1 if expression is true, then continue to command2.
if expression is not true, skip directly to command2.
can be used only in a command chain, after another command.

use "+if expr +begin ... +endif" to run multiple commands
as one block, if expression is true.

supported expressions

   return code comparison
   "rc=n"     return code of previous command equal  to   n
   "rc>n"     return code of previous command higher than n
   "rc<n"     return code of previous command lower  than n
   "rc<>n"    return code of previous comm.  not equal to n

   generic text or number comparison
   "l = r"    left part is equal to right
   "l <> r"   left part is not equal to right
   "l < r"    left part is lower  then right
   "l > r"    left part is higher then right
   "l <= r"   left part is lower  or equal
   "l >= r"   left part is higher or equal
   if both l and r contain only digits a numeric
   comparison is done, else a text comparison.

   logic values (since sfk
   "1"        true, execute command or block
   "0"        false, skip command or block

   options for if must be given before expression.
   -var       use sfk variables, must be first option
   -text      force text comparison (nocase)
   -case      case sensitive text comparison
   -debug     tell what is done in a generic comparison

limited nesting
   if ... begin ... endif
   - may not contain other if[exist] / begin / endif
   - but may contain short if ... without begin.
   invalid nesting is not detected, and causes an undefined
   program flow. you may add global option -strictif to (try)
   to detect wrong if statements better.

do not forget 'begin' when using complex statements!
   sfk if ... begin ... +elseif ... +else ... +endif
   strictly requires the 'begin', otherwise it may do
   nothing, without any notice.

no chaining data support since sfk 1.9.3
   +if   does not accept any chain input data, as this
         creates ambiguities with many following
         commands, like +if ... +setvar a=text

see also
   sfk ifexist  check if a file or folder exists.
   sfk call     call sub functions in a script.
   sfk goto     jump to a local label.

   sfk filter in.txt -+err +if "rc>0" run -yes "x.bat" +echo done
      if file in.txt contains the word "err", run x.bat.
      the "echo done" is always executed.

   sfk xex -justrc in.txt "/foo*bar/"
    +if "rc=0" stop 9 "[Red]error:[def] miss" +echo "match"
      type this all in one line, or use "sfk cmd 18". [18]
      if file in.txt does not contain the search pattern
      then stop with return code 9, printing an error.

   sfk -var echo "foo and bar" +setvar a
    +if "#(contains(a,'bar'))" tell "found bar" +tell "done"
      prints "found bar" and then "done", because the
      'contains' returns '1', causing command execution.

   sfk if 0 begin tell one +else tell two +endif +tell three
      prints 'two' and 'three'.