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