192108Sphk#!/bin/sh 292108Sphkecho T.clv: check command-line variables 392108Sphk 492108Sphkawk=${awk-../a.out} 592108Sphk 692108Sphkrm -f core 792108Sphk 892108Sphk# stdin only, no cmdline asgn 992108Sphkecho 'hello 1092108Sphkgoodbye' | $awk ' 1192108SphkBEGIN { x=0; print x; getline; print x, $0 } 1292108Sphk' >foo1 1392108Sphkecho '0 1492108Sphk0 hello' >foo2 1592108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (stdin only)' 1692108Sphk 1792108Sphk# cmdline asgn then stdin 1892108Sphkecho 'hello 1992108Sphkgoodbye' | $awk ' 2092108SphkBEGIN { x=0; print x; getline; print x, $0 } 2192108Sphk' x=1 >foo1 2292108Sphkecho '0 2392108Sphk1 hello' >foo2 2492108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=1 only)' 2592108Sphk 2692108Sphk# several cmdline asgn, then stdin 2792108Sphkecho 'hello 2892108Sphkgoodbye' | $awk ' 2992108SphkBEGIN { x=0; print x; getline; print x, $0 } 3092108Sphk' x=1 x=2 x=3 >foo1 3192108Sphkecho '0 3292108Sphk3 hello' >foo2 3392108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)' 3492108Sphk 3592108Sphk# several cmdline asgn, then file 36116196Sobrienecho 'hello 37116196Sobriengoodbye' >foo 38116196Sobrien$awk ' 39104519SphkBEGIN { x=0; print x; getline; print x, $0 } 40104519Sphk' x=1 x=2 x=3 foo >foo1 4192108Sphkecho '0 4292108Sphk3 hello' >foo2 4392108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)' 4492108Sphk 4592108Sphk# cmdline asgn then file 46196823Spjdecho 4 >foo1 47110119Sphk$awk 'BEGIN { getline; print x}' x=4 /dev/null >foo2 4892108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=4 /dev/null)' 49223921Sae 5092108Sphk#cmdline asgn then file but no read of it 51111979Sphkecho 0 >foo1 5292108Sphk$awk 'BEGIN { x=0; getline <"/dev/null"; print x}' x=5 /dev/null >foo2 5392108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=5 /dev/null)' 5492108Sphk 5592108Sphk#cmdline asgn then file then read 5692108Sphkecho 'xxx 57112952Sphkyyy 58112476Sphkzzz' >foo 5992108Sphkecho '6 60219970Smavend' >foo1 61219970Smav$awk 'BEGIN { x=0; getline; print x} 62219970Smav END { print x }' x=6 foo x=end >foo2 63248694Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=6 /dev/null)' 64219970Smav 65219970Smav#cmdline asgn then file then read 66219970Smavecho '0 67219970Smavend' >foo1 68219970Smav$awk 'BEGIN { x=0; getline <"/dev/null"; print x} 69219970Smav END { print x }' x=7 /dev/null x=end >foo2 70219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=7 /dev/null)' 7192108Sphk 72133314Sphk#cmdline asgn then file then read; _ in commandname 73133314Sphkecho '0 74133314Sphkend' >foo1 75237518Sken$awk 'BEGIN { _=0; getline <"/dev/null"; print _} 7692108Sphk END { print _ }' _=7A /dev/null _=end >foo2 77141624Sphkdiff foo1 foo2 || echo 'BAD: T.clv (_=7A /dev/null)' 78249507Sivoras 79133318Sphk# illegal varname in commandname 80133314Sphk$awk '{ print }' 99_=foo /dev/null >foo 2>foo2 81133314Sphkgrep "can't open.*foo" foo2 >/dev/null 2>&1 || echo 'BAD: T.clv (7B: illegal varname)' 82133314Sphk 83237518Sken# these test the new -v option: awk ... -v a=1 -v b=2 'prog' does before BEGIN 84133314Sphk 8592108Sphkecho 123 >foo1 8692108Sphk$awk -v x=123 'BEGIN { print x }' >foo2 87219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=11)' 88227309Sed 89227309Sedecho 123 >foo1 90219970Smav$awk -vx=123 'BEGIN { print x }' >foo2 91115473Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=11a)' 92115473Sphk 93110052Sphkecho 123 abc 10.99 >foo1 94110052Sphk$awk -v x=123 -v y=abc -v z1=10.99 'BEGIN { print x, y, z1 }' >foo2 95110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=12)' 96226736Spjd 97125975Sphkecho 123 abc 10.99 >foo1 98125975Sphk$awk -vx=123 -vy=abc -vz1=10.99 'BEGIN { print x, y, z1 }' >foo2 99110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)' 100110052Sphk 101110052Sphkecho 123 abc 10.99 >foo1 102110052Sphk$awk -v x=123 -v y=abc -v z1=10.99 -- 'BEGIN { print x, y, z1 }' >foo2 103110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)' 104226736Spjd 105125975Sphkecho 'BEGIN { print x, y, z1 }' >foo0 106125975Sphkecho 123 abc 10.99 >foo1 107110052Sphk$awk -v x=123 -v y=abc -f foo0 -v z1=10.99 >foo2 108110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=13)' 10992108Sphk 11092108Sphkecho 'BEGIN { print x, y, z1 }' >foo0 11192108Sphkecho 123 abc 10.99 >foo1 11292108Sphk$awk -vx=123 -vy=abc -f foo0 -vz1=10.99 >foo2 113219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=13a)' 11492108Sphk 11592108Sphkecho 'BEGIN { print x, y, z1 }' >foo0 11692108Sphkecho 123 abc 10.99 >foo1 11792108Sphk$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 >foo2 11892108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=14)' 119248694Smav 120219970Smavecho 'BEGIN { print x, y, z1 }' >foo0 121125539Spjdecho 123 abc 10.99 >foo1 122125539Spjd$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 >foo2 123125539Spjddiff foo1 foo2 || echo 'BAD: T.clv (x=14a)' 124125539Spjd 125125539Spjdecho 'BEGIN { print x, y, z1 } 126125539SpjdEND { print x }' >foo0 127125975Sphkecho '123 abc 10.99 128125539Spjd4567' >foo1 12992108Sphk$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 /dev/null x=4567 /dev/null >foo2 13092108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=15)' 13192108Sphk 132110119Sphkecho 'BEGIN { print x, y, z1 } 13392108SphkEND { print x }' >foo0 134111668Sphkecho '123 abc 10.99 135110119Sphk4567' >foo1 136111668Sphk$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 /dev/null x=4567 /dev/null >foo2 137166861Sn_hibmadiff foo1 foo2 || echo 'BAD: T.clv (x=15a)' 138110119Sphk 139110119Sphkecho 'BEGIN { print x, y, z1 } 140110119SphkNR==1 { print x }' >foo0 141251616Smavecho '123 abc 10.99 142251616Smav4567' >foo1 143110119Sphk$awk -v x=123 -v y=abc -v z1=10.99 -f foo0 x=4567 /etc/passwd >foo2 144105551Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=16)' 145105551Sphk 146110727Sphkecho 'BEGIN { print x, y, z1 } 147110727SphkNR==1 { print x }' >foo0 148110727Sphkecho '123 abc 10.99 149110727Sphk4567' >foo1 150110727Sphk$awk -vx=123 -vy=abc -vz1=10.99 -f foo0 x=4567 /etc/passwd >foo2 151252657Ssmhdiff foo1 foo2 || echo 'BAD: T.clv (x=16a)' 152252657Ssmh 153252657Ssmh 154252657Ssmh 155249940Ssmh# special chars in commandline assigned value; 156252657Ssmh# have to use local echo to avoid quoting problems. 157249940Ssmh 158249940Ssmh./echo 'a\\b\z' >foo1 159249940Ssmh./echo 'hello' | $awk '{print x}' x='\141\\\\\142\\z' >foo2 160249940Ssmhdiff foo1 foo2 || echo 'BAD: T.clv (x=17)' 16192108Sphk 162111668Sphk./echo "a 163110119Sphkz" >foo1 164111668Sphk./echo 'hello' | $awk '{print x}' x='a\nz' >foo2 165110119Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=18)' 166110119Sphk 167110119Sphk# a bit circular here... 168110119Sphk$awk 'BEGIN { printf("a%c%c%cz\n", "\b", "\r", "\f") }' >foo1 169110119Sphk./echo 'hello' | $awk '{print x}' x='a\b\r\fz' >foo2 170219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=19)' 171219970Smav 172219970Smav 173110119Sphk### newer -v tests 17492108Sphk 17592108Sphk 17692108Sphk$awk -vx 'BEGIN {print x}' >foo 2>&1 17792108Sphkgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20)' 17892108Sphk 17995038Sphk$awk -v x 'BEGIN {print x}' >foo 2>&1 180219950Smavgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20a)' 18195038Sphk 182104450Sphk