# 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 &/ |