(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:<Id.Left_Backtick '`'> child:(C {<which>} {<rm>})) <' -f '> ($ Id.VSub_DollarName '$violators') ) } {<0>} ) (command.Pipeline children: [ (command.ForEach iter_name: name iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<cut>} {<-d> <Id.Lit_Colon ':'>} {<-f1> <Id.Lit_Comma ','> <3>} {<'/etc/passwd'>} ) (C {<awk>} {<-F> <Id.Lit_Colon ':'>} {(SQ <'$2 > 99 { print $1 }'>)}) ] 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 <'{ sum += $7 } END { print sum / (1024*1024) }'>)}) ] negated: F ) ] ) ) (command.Simple words: [ {<awk>} { (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'2 > '> ($ Id.VSub_DollarName '$MAXDISKUSAGE') <' { print '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0 }'> ) } ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$violators')} ) ] do_fork: T ) ] negated: F ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-s>} {($ Id.VSub_DollarName '$violators')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) 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:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [145 159] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<read>} {<account>} {<usage>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (command.Pipeline children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc 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'> ] ) ) ] do_fork: T ) (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 op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {($ Id.VSub_DollarName '$violators')} ) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] )