Hamilton LaboratoriesHamilton C shell 2012User guideSamplessh2csh.csh

expr.sed

Oregon Coast

expr.sed
Previous | Next

#  First-pass fixup of expressions.
#  Copyright (c) 1992-2012 by Hamilton Laboratories.  All rights reserved.


#     1. Convert test statements:

#           test              -->      @ status = 1
#           test x            -->      @ status = [ x ] == ""
#           test ...          -->      @ status = [ ... ] != 0
#           ... test          -->      1
#           ... test a        -->      ... [ a != "" ]
#           ... test ...      -->      ... [ ... ]

#     2. Fixup expression operators and syntax:

#           string            -->      "string"
#           -n foo            -->      foo != ""
#           -z foo            -->      foo == ""
#           a = b             -->      a == b
#           a -eq b           -->      a == b
#           a -gt b           -->      a > b
#           a -ge b           -->      a >= b
#           a -lt b           -->      a < b
#           a -le b           -->      a <= b
#           a -ne b           -->      a != b
#           a -o b            -->      a || b
#           a -a b            -->      a && b

#           [ ... ]           -->      ( ... )

#     3. Do `expr ...` evaluation in the C shell:

#           i=`expr ${i} + 1` -->      @ i=i + 1

#     4. PATH=a:b:c           -->      PATH="a;b;c"

#     5. Assignments become set statements.


/^[   ]*test/{
   s/^\([   ]*\)test[   ]*$/\1@ status = 1/
   s/^\([   ]*\)test[   ][    ]*\([^   ][^   ]*\)$/\1@ status = [ \2 ] == ""/
   s/^\([   ]*\)test[   ][    ]*\([^   ].*\)$/\1@ status = [ \2 ] != 0/
   }

/^[^#]*[    ]test/{
   s/\([    ]\)test[    ]*$/\11/
   s/\([    ]\)test[    ][    ]*\([^   ][^   ]*\)$/\1[ \2 != "" ]/
   s/\([    ]\)test[    ][    ]*\([^   ].*\)$/\1[ \2 ]/
   }

/^[^#]* \[[^[].*\]/{
   s/\(\[.*[   ]\)\([a-zA-Z_][a-zA-Z_0-9]*\)/\1"\2"/g
   s/-n[    ]*\([^ ].*\) \]/\1 != "" ]/g
   s/-z[    ]*\([^ ].*\) \]/\1 == "" ]/g
   s/[   ]*=[  ]*/ == /g
   s/[   ]*-eq[   ]*/ == /g
   s/[   ]*-gt[   ]*/ > /g
   s/[   ]*-ge[   ]*/ >= /g
   s/[   ]*-lt[   ]*/ < /g
   s/[   ]*-le[   ]*/ <= /g
   s/[   ]*-ne[   ]*/ != /g
   s/[   ]*-o[    ]*/ || /g
   s/[   ]*-a[    ]*/ \&\& /g
   s/\[/(/
   s/]/)/
   }

/^[^#]*=`expr.*`/{
   s/`//g
   s/expr //
   /: "\.\*"/s/\([^  =][^  ]*\)[    ]*: "\.\*"/strlen(\1)/
   /^[   ]*[a-zA-Z][a-zA-Z0-9_]*[   ]*=/s/[a-zA-Z]/@ &/
   }

/^[   ]*PATH=[^"]/{
   s/:/;/g
   s/=\(.*\)/="\1"/
   }
/^[   ]*[a-zA-Z][a-zA-Z0-9_]*[   ]*=/s/[a-zA-Z]/set &/

Previous | Next