1e6d6c189SCody Peter Mello#!/bin/bash 2e6d6c189SCody Peter Mello 3e6d6c189SCody Peter Melloif [[ -z "$AWK" || -z "$WORKDIR" ]]; then 4e6d6c189SCody Peter Mello printf '$AWK and $WORKDIR must be set\n' >&2 5e6d6c189SCody Peter Mello exit 1 6e6d6c189SCody Peter Mellofi 7e6d6c189SCody Peter Mello 8e6d6c189SCody Peter MelloTEMP0=$WORKDIR/test.temp.0 9e6d6c189SCody Peter MelloTEMP1=$WORKDIR/test.temp.1 10e6d6c189SCody Peter MelloTEMP2=$WORKDIR/test.temp.2 11e6d6c189SCody Peter MelloTEMP3=$WORKDIR/test.temp.3 12e6d6c189SCody Peter MelloTEMP4=$WORKDIR/test.temp.4 13e6d6c189SCody Peter MelloTEMP5=$WORKDIR/test.temp.5 14e6d6c189SCody Peter Mello 15e6d6c189SCody Peter MelloRESULT=0 16e6d6c189SCody Peter Mello 17e6d6c189SCody Peter Mellofail() { 18e6d6c189SCody Peter Mello echo "$1" >&2 19e6d6c189SCody Peter Mello RESULT=1 20e6d6c189SCody Peter Mello} 21e6d6c189SCody Peter Mello 22e6d6c189SCody Peter Melloecho T.argv: misc tests of argc and argv 23e6d6c189SCody Peter Mello 24e6d6c189SCody Peter Melloecho > $TEMP1 25e6d6c189SCody Peter Melloecho > $TEMP2 26e6d6c189SCody Peter Mello$AWK ' 27e6d6c189SCody Peter MelloBEGIN { 28e6d6c189SCody Peter Mello for (i = 1; i < ARGC-1; i++) 29e6d6c189SCody Peter Mello printf "%s ", ARGV[i] 30e6d6c189SCody Peter Mello if (ARGC > 1) 31e6d6c189SCody Peter Mello printf "%s", ARGV[i] 32e6d6c189SCody Peter Mello printf "\n" 33e6d6c189SCody Peter Mello exit 34e6d6c189SCody Peter Mello}' * > $TEMP1 35e6d6c189SCody Peter Melloecho * > $TEMP2 36e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (echo1 *)' 37e6d6c189SCody Peter Mello 38e6d6c189SCody Peter Mello$AWK ' 39e6d6c189SCody Peter MelloBEGIN { 40e6d6c189SCody Peter Mello for (i = 1; i < ARGC; i++) { 41e6d6c189SCody Peter Mello printf "%s", ARGV[i] 42e6d6c189SCody Peter Mello if (i < ARGC-1) 43e6d6c189SCody Peter Mello printf " " 44e6d6c189SCody Peter Mello } 45e6d6c189SCody Peter Mello printf "\n" 46e6d6c189SCody Peter Mello exit 47e6d6c189SCody Peter Mello}' * > $TEMP1 48e6d6c189SCody Peter Melloecho * > $TEMP2 49e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (echo2 *)' 50e6d6c189SCody Peter Mello 51e6d6c189SCody Peter Mello$AWK ' 52e6d6c189SCody Peter MelloBEGIN { 53e6d6c189SCody Peter Mello print ARGC 54e6d6c189SCody Peter Mello ARGV[ARGC-1] = "" 55e6d6c189SCody Peter Mello for (i=0; i < ARGC; i++) 56e6d6c189SCody Peter Mello print ARGV[i] 57e6d6c189SCody Peter Mello exit 58e6d6c189SCody Peter Mello} 59e6d6c189SCody Peter Mello' a bc def gh > $TEMP1 60e6d6c189SCody Peter Melloecho "5 61e6d6c189SCody Peter Mello$AWK 62e6d6c189SCody Peter Melloa 63e6d6c189SCody Peter Mellobc 64e6d6c189SCody Peter Mellodef 65e6d6c189SCody Peter Mello" > $TEMP2 66e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (argc *)' 67e6d6c189SCody Peter Mello 68e6d6c189SCody Peter Melloecho '1 69e6d6c189SCody Peter Mello2 70e6d6c189SCody Peter Mello3' > $TEMP0 71e6d6c189SCody Peter Melloecho 'foo1 72e6d6c189SCody Peter Mellofoo2 73e6d6c189SCody Peter Mellofoo3' > $TEMP1 74e6d6c189SCody Peter Mello$AWK '{print L $0}' L=foo <$TEMP0 > $TEMP2 75e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo <test.temp.1)' 76e6d6c189SCody Peter Mello 77e6d6c189SCody Peter Melloecho '1 78e6d6c189SCody Peter Mello2 79e6d6c189SCody Peter Mello3' > $TEMP0 80e6d6c189SCody Peter Melloecho 'foo1 81e6d6c189SCody Peter Mellofoo2 82e6d6c189SCody Peter Mellofoo3' > $TEMP1 83e6d6c189SCody Peter Mello$AWK '{print L $0}' L=foo $TEMP0 > $TEMP2 84e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo test.temp.1)' 85e6d6c189SCody Peter Mello 86e6d6c189SCody Peter Melloecho '1 87e6d6c189SCody Peter Mello2 88e6d6c189SCody Peter Mello3' > $TEMP0 89e6d6c189SCody Peter Melloecho 'foo1 90e6d6c189SCody Peter Mellofoo2 91e6d6c189SCody Peter Mellofoo3' > $TEMP1 92e6d6c189SCody Peter Mellocat $TEMP0 | $AWK '{print L $0}' L=foo - > $TEMP2 93e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo -)' 94e6d6c189SCody Peter Mello 95e6d6c189SCody Peter Melloecho '1 96e6d6c189SCody Peter Mello2 97e6d6c189SCody Peter Mello3' > $TEMP0 98e6d6c189SCody Peter Melloecho 'foo1 99e6d6c189SCody Peter Mellofoo2 100e6d6c189SCody Peter Mellofoo3 101e6d6c189SCody Peter Melloglop1 102e6d6c189SCody Peter Melloglop2 103e6d6c189SCody Peter Melloglop3' > $TEMP1 104e6d6c189SCody Peter Mello$AWK '{print L $0}' L=foo $TEMP0 L=glop $TEMP0 > $TEMP2 105e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo L=glop)' 106e6d6c189SCody Peter Mello 107e6d6c189SCody Peter Melloecho '1 108e6d6c189SCody Peter Mello2 109e6d6c189SCody Peter Mello3' > $TEMP0 110e6d6c189SCody Peter Melloecho '111 111e6d6c189SCody Peter Mello112 112e6d6c189SCody Peter Mello113 113e6d6c189SCody Peter Mello221 114e6d6c189SCody Peter Mello222 115e6d6c189SCody Peter Mello223' > $TEMP1 116e6d6c189SCody Peter Mello$AWK '{print L $0}' L=11 $TEMP0 L=22 $TEMP0 > $TEMP2 117e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=11 L=22)' 118e6d6c189SCody Peter Mello 119e6d6c189SCody Peter Melloecho 3.345 > $TEMP1 120e6d6c189SCody Peter Mello$AWK 'BEGIN { print ARGV[1] + ARGV[2]}' 1 2.345 > $TEMP2 121e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (ARGV[1] + ARGV[2])' 122e6d6c189SCody Peter Mello 123e6d6c189SCody Peter Melloecho 3.345 > $TEMP1 124e6d6c189SCody Peter Mellox1=1 x2=2.345 $AWK 'BEGIN { print ENVIRON["x1"] + ENVIRON["x2"]}' 1 2.345 > $TEMP2 125e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (ENVIRON[x1] + ENVIRON[x2])' 126e6d6c189SCody Peter Mello 127e6d6c189SCody Peter Mello 128e6d6c189SCody Peter Melloecho 'test.temp.1' > $TEMP1 129e6d6c189SCody Peter Melloecho 'test.temp.2' > $TEMP2 130e6d6c189SCody Peter Melloecho 'test.temp.3' > $TEMP3 131e6d6c189SCody Peter Mello$AWK 'BEGIN { ARGV[2] = "" } 132e6d6c189SCody Peter Mello { print }' $TEMP1 $TEMP2 $TEMP3 > $TEMP4 133e6d6c189SCody Peter Melloecho 'test.temp.1 134e6d6c189SCody Peter Mellotest.temp.3' > $TEMP5 135e6d6c189SCody Peter Mellodiff $TEMP4 $TEMP5 || fail 'BAD: T.argv zap ARGV[2]' 136e6d6c189SCody Peter Mello 137*3ee4fc2aSCody Peter Melloecho hi > $TEMP1 ; mv $TEMP1 $TEMP2 138*3ee4fc2aSCody Peter Mello$AWK 'BEGIN { ARGV[1] = "'$TEMP2'" ; print FILENAME } 139*3ee4fc2aSCody Peter Mello { print FILENAME }' $TEMP1 > $TEMP3 140*3ee4fc2aSCody Peter Melloecho " 141*3ee4fc2aSCody Peter Mello$TEMP2" > $TEMP4 142*3ee4fc2aSCody Peter Mellodiff $TEMP3 $TEMP4 || fail 'BAD: T.argv startup FILENAME' 143*3ee4fc2aSCody Peter Mello # assumes that startup FILENAME is "" 144*3ee4fc2aSCody Peter Mello 145*3ee4fc2aSCody Peter Mello 146*3ee4fc2aSCody Peter Mello# test data balanced on pinhead... 147*3ee4fc2aSCody Peter Melloecho "ARGV[3] is /dev/null 148*3ee4fc2aSCody Peter MelloARGV[0] is $AWK 149*3ee4fc2aSCody Peter MelloARGV[1] is /dev/null" > $TEMP1 150*3ee4fc2aSCody Peter Mello 151*3ee4fc2aSCody Peter Mello$AWK 'BEGIN { # this is a variant of arnolds original example 152*3ee4fc2aSCody Peter Mello ARGV[1] = "/dev/null" 153*3ee4fc2aSCody Peter Mello ARGV[2] = "glotch" # file open must skipped deleted argv 154*3ee4fc2aSCody Peter Mello ARGV[3] = "/dev/null" 155*3ee4fc2aSCody Peter Mello ARGC = 4 156*3ee4fc2aSCody Peter Mello delete ARGV[2] 157*3ee4fc2aSCody Peter Mello} 158*3ee4fc2aSCody Peter Mello# note that input is read here 159*3ee4fc2aSCody Peter MelloEND { 160*3ee4fc2aSCody Peter Mello for (i in ARGV) 161*3ee4fc2aSCody Peter Mello printf("ARGV[%d] is %s\n", i, ARGV[i]) 162*3ee4fc2aSCody Peter Mello}' > $TEMP2 163*3ee4fc2aSCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv delete ARGV[2]' 164*3ee4fc2aSCody Peter Mello 165e6d6c189SCody Peter Melloexit $RESULT 166