(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MAXDISKUSAGE) op: assign_op.Equal rhs: {(1)} spids: [14] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:violators) op: assign_op.Equal rhs: {(DQ (/tmp/diskhogs0.) ($ Id.VSub_Dollar '$$'))} spids: [17] ) ] ) (C {(trap)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:27) command_list: (command.CommandList children:[(C {(which)} {(rm)})]) ) (' -f ') ($ Id.VSub_DollarName '$violators') ) } {(0)} ) (command.Pipeline children: [ (command.ForEach iter_name: name iter_words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:47) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(cut)} {(-d) (Id.Lit_Other ':')} {(-f1) (Id.Lit_Comma ',') (3)} {(/etc/passwd)} ) (C {(awk)} {(-F) (Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'$2 > 99 { print $1 }' span_id:67))} ) ] negated: F ) ] ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {(-n)} {(DQ ($ Id.VSub_DollarName '$name') (' '))}) (command.Pipeline children: [ (C {(find)} {(/)} {(/usr)} {(/var)} {(/Users)} {(-xdev)} {(-user)} {($ Id.VSub_DollarName '$name')} {(-type)} {(f)} {(-ls)} ) (C {(awk)} { (SQ (Token id: Id.Lit_Chars val: '{ sum += $7 } END { print sum / (1024*1024) }' span_id: 121 ) ) } ) ] negated: F ) ] ) ) (command.Simple words: [ {(awk)} { (DQ (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:132)) ('2 > ') ($ Id.VSub_DollarName '$MAXDISKUSAGE') (' { print ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:136) ) ('0 }') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:140) fd: -1 arg_word: {($ Id.VSub_DollarName '$violators')} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-s)} {($ Id.VSub_DollarName '$violators')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:157) ) ] action: [ (C {(echo)} {(DQ ('No users exceed the disk quota of ') (${ Id.VSub_Name MAXDISKUSAGE) (MB))} ) (C {(cat)} {($ Id.VSub_DollarName '$violators')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:178) arg_word: {(0)} ) ] spids: [145 159] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:185) cond: [ (command.Sentence child: (C {(read)} {(account)} {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:193) ) ] body: (command.DoGroup children: [ (command.Pipeline children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:200) fd: -1 here_begin: {(EOF)} here_end_span_id: 239 stdin_parts: [ ('Your disk usage is ') (${ Id.VSub_Name usage) ('MB, but you have been allocated only\n') (${ Id.VSub_Name MAXDISKUSAGE) ('MB. This means that you need to either delete some of \n') ( "your files, compress your files (see 'gzip' or 'bzip2' for powerful and\n" ) ('easy-to-use compression programs), or talk with us about increasing\n') ('your disk allocation.\n') ('\n') ('Thanks for your cooperation in this matter.\n') ('\n') ('Dave Taylor @ x554\n') ] ) ] ) (C {(fmt)}) (C {(mail)} {(-s)} {(DQ ('Warning: ') ($ Id.VSub_DollarName '$account') (' Exceeds Quota'))} {($ Id.VSub_DollarName '$account')} ) ] negated: F ) (C {(echo)} { (DQ ('Account ') ($ Id.VSub_DollarName '$account') (' has ') ($ Id.VSub_DollarName '$usage') (' MB of disk space. User notified.') ) } ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:254) fd: -1 arg_word: {($ Id.VSub_DollarName '$violators')} ) ] ) (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:259) arg_word:{(0)}) ] )