1*23f24377SWarner Losh#!/bin/sh 2*23f24377SWarner Loshecho T.clv: check command-line variables 3*23f24377SWarner Losh 4*23f24377SWarner Loshawk=${awk-../a.out} 5*23f24377SWarner Losh 6*23f24377SWarner Loshrm -f core 7*23f24377SWarner Losh 8*23f24377SWarner Losh# stdin only, no cmdline asgn 9*23f24377SWarner Loshecho 'hello 10*23f24377SWarner Loshgoodbye' | $awk ' 11*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 } 12*23f24377SWarner Losh' >foo1 13*23f24377SWarner Loshecho '0 14*23f24377SWarner Losh0 hello' >foo2 15*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (stdin only)' 16*23f24377SWarner Losh 17*23f24377SWarner Losh# cmdline asgn then stdin 18*23f24377SWarner Loshecho 'hello 19*23f24377SWarner Loshgoodbye' | $awk ' 20*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 } 21*23f24377SWarner Losh' x=1 >foo1 22*23f24377SWarner Loshecho '0 23*23f24377SWarner Losh1 hello' >foo2 24*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=1 only)' 25*23f24377SWarner Losh 26*23f24377SWarner Losh# several cmdline asgn, then stdin 27*23f24377SWarner Loshecho 'hello 28*23f24377SWarner Loshgoodbye' | $awk ' 29*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 } 30*23f24377SWarner Losh' x=1 x=2 x=3 >foo1 31*23f24377SWarner Loshecho '0 32*23f24377SWarner Losh3 hello' >foo2 33*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)' 34*23f24377SWarner Losh 35*23f24377SWarner Losh# several cmdline asgn, then file 36*23f24377SWarner Loshecho 'hello 37*23f24377SWarner Loshgoodbye' >foo 38*23f24377SWarner Losh$awk ' 39*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 } 40*23f24377SWarner Losh' x=1 x=2 x=3 foo >foo1 41*23f24377SWarner Loshecho '0 42*23f24377SWarner Losh3 hello' >foo2 43*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)' 44*23f24377SWarner Losh 45*23f24377SWarner Losh# cmdline asgn then file 46*23f24377SWarner Loshecho 4 >foo1 47*23f24377SWarner Losh$awk 'BEGIN { getline; print x}' x=4 /dev/null >foo2 48*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=4 /dev/null)' 49*23f24377SWarner Losh 50*23f24377SWarner Losh#cmdline asgn then file but no read of it 51*23f24377SWarner Loshecho 0 >foo1 52*23f24377SWarner Losh$awk 'BEGIN { x=0; getline <"/dev/null"; print x}' x=5 /dev/null >foo2 53*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=5 /dev/null)' 54*23f24377SWarner Losh 55*23f24377SWarner Losh#cmdline asgn then file then read 56*23f24377SWarner Loshecho 'xxx 57*23f24377SWarner Loshyyy 58*23f24377SWarner Loshzzz' >foo 59*23f24377SWarner Loshecho '6 60*23f24377SWarner Loshend' >foo1 61*23f24377SWarner Losh$awk 'BEGIN { x=0; getline; print x} 62*23f24377SWarner Losh END { print x }' x=6 foo x=end >foo2 63*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=6 /dev/null)' 64*23f24377SWarner Losh 65*23f24377SWarner Losh#cmdline asgn then file then read 66*23f24377SWarner Loshecho '0 67*23f24377SWarner Loshend' >foo1 68*23f24377SWarner Losh$awk 'BEGIN { x=0; getline <"/dev/null"; print x} 69*23f24377SWarner Losh END { print x }' x=7 /dev/null x=end >foo2 70*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=7 /dev/null)' 71*23f24377SWarner Losh 72*23f24377SWarner Losh#cmdline asgn then file then read; _ in commandname 73*23f24377SWarner Loshecho '0 74*23f24377SWarner Loshend' >foo1 75*23f24377SWarner Losh$awk 'BEGIN { _=0; getline <"/dev/null"; print _} 76*23f24377SWarner Losh END { print _ }' _=7A /dev/null _=end >foo2 77*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (_=7A /dev/null)' 78*23f24377SWarner Losh 79*23f24377SWarner Losh# illegal varname in commandname 80*23f24377SWarner Losh$awk '{ print }' 99_=foo /dev/null >foo 2>foo2 81*23f24377SWarner Loshgrep "can't open.*foo" foo2 >/dev/null 2>&1 || echo 'BAD: T.clv (7B: illegal varname)' 82*23f24377SWarner Losh 83*23f24377SWarner Losh# these test the new -v option: awk ... -v a=1 -v b=2 'prog' does before BEGIN 84*23f24377SWarner Losh 85*23f24377SWarner Loshecho 123 >foo1 86*23f24377SWarner Losh$awk -v x=123 'BEGIN { print x }' >foo2 87*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=11)' 88*23f24377SWarner Losh 89*23f24377SWarner Loshecho 123 >foo1 90*23f24377SWarner Losh$awk -vx=123 'BEGIN { print x }' >foo2 91*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=11a)' 92*23f24377SWarner Losh 93*23f24377SWarner Loshecho 123 abc 10.99 >foo1 94*23f24377SWarner Losh$awk -v x=123 -v y=abc -v z1=10.99 'BEGIN { print x, y, z1 }' >foo2 95*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=12)' 96*23f24377SWarner Losh 97*23f24377SWarner Loshecho 123 abc 10.99 >foo1 98*23f24377SWarner Losh$awk -vx=123 -vy=abc -vz1=10.99 'BEGIN { print x, y, z1 }' >foo2 99*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)' 100*23f24377SWarner Losh 101*23f24377SWarner Loshecho 123 abc 10.99 >foo1 102*23f24377SWarner Losh$awk -v x=123 -v y=abc -v z1=10.99 -- 'BEGIN { print x, y, z1 }' >foo2 103*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)' 104*23f24377SWarner Losh 105*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0 106*23f24377SWarner Loshecho 123 abc 10.99 >foo1 107*23f24377SWarner Losh$awk -v x=123 -v y=abc -f foo0 -v z1=10.99 >foo2 108*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=13)' 109*23f24377SWarner Losh 110*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0 111*23f24377SWarner Loshecho 123 abc 10.99 >foo1 112*23f24377SWarner Losh$awk -vx=123 -vy=abc -f foo0 -vz1=10.99 >foo2 113*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=13a)' 114*23f24377SWarner Losh 115*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0 116*23f24377SWarner Loshecho 123 abc 10.99 >foo1 117*23f24377SWarner Losh$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 >foo2 118*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=14)' 119*23f24377SWarner Losh 120*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0 121*23f24377SWarner Loshecho 123 abc 10.99 >foo1 122*23f24377SWarner Losh$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 >foo2 123*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=14a)' 124*23f24377SWarner Losh 125*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 } 126*23f24377SWarner LoshEND { print x }' >foo0 127*23f24377SWarner Loshecho '123 abc 10.99 128*23f24377SWarner Losh4567' >foo1 129*23f24377SWarner Losh$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 /dev/null x=4567 /dev/null >foo2 130*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=15)' 131*23f24377SWarner Losh 132*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 } 133*23f24377SWarner LoshEND { print x }' >foo0 134*23f24377SWarner Loshecho '123 abc 10.99 135*23f24377SWarner Losh4567' >foo1 136*23f24377SWarner Losh$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 /dev/null x=4567 /dev/null >foo2 137*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=15a)' 138*23f24377SWarner Losh 139*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 } 140*23f24377SWarner LoshNR==1 { print x }' >foo0 141*23f24377SWarner Loshecho '123 abc 10.99 142*23f24377SWarner Losh4567' >foo1 143*23f24377SWarner Losh$awk -v x=123 -v y=abc -v z1=10.99 -f foo0 x=4567 /etc/passwd >foo2 144*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=16)' 145*23f24377SWarner Losh 146*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 } 147*23f24377SWarner LoshNR==1 { print x }' >foo0 148*23f24377SWarner Loshecho '123 abc 10.99 149*23f24377SWarner Losh4567' >foo1 150*23f24377SWarner Losh$awk -vx=123 -vy=abc -vz1=10.99 -f foo0 x=4567 /etc/passwd >foo2 151*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=16a)' 152*23f24377SWarner Losh 153*23f24377SWarner Losh 154*23f24377SWarner Losh 155*23f24377SWarner Losh# special chars in commandline assigned value; 156*23f24377SWarner Losh# have to use local echo to avoid quoting problems. 157*23f24377SWarner Losh 158*23f24377SWarner Losh./echo 'a\\b\z' >foo1 159*23f24377SWarner Losh./echo 'hello' | $awk '{print x}' x='\141\\\\\142\\z' >foo2 160*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=17)' 161*23f24377SWarner Losh 162*23f24377SWarner Losh./echo "a 163*23f24377SWarner Loshz" >foo1 164*23f24377SWarner Losh./echo 'hello' | $awk '{print x}' x='a\nz' >foo2 165*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=18)' 166*23f24377SWarner Losh 167*23f24377SWarner Losh# a bit circular here... 168*23f24377SWarner Losh$awk 'BEGIN { printf("a%c%c%cz\n", "\b", "\r", "\f") }' >foo1 169*23f24377SWarner Losh./echo 'hello' | $awk '{print x}' x='a\b\r\fz' >foo2 170*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=19)' 171*23f24377SWarner Losh 172*23f24377SWarner Losh 173*23f24377SWarner Losh### newer -v tests 174*23f24377SWarner Losh 175*23f24377SWarner Losh 176*23f24377SWarner Losh$awk -vx 'BEGIN {print x}' >foo 2>&1 177*23f24377SWarner Loshgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20)' 178*23f24377SWarner Losh 179*23f24377SWarner Losh$awk -v x 'BEGIN {print x}' >foo 2>&1 180*23f24377SWarner Loshgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20a)' 181*23f24377SWarner Losh 182