(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>})
  ]
)