(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'ATJOBDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ATJOBDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ATJOBDIR='> name:ATJOBDIR) op: assign_op.Equal rhs: {(DQ <'/var/at/jobs'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CRONJOBDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CRONJOBDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CRONJOBDIR='> name:CRONJOBDIR) op: assign_op.Equal rhs: {(DQ <'/var/cron/tabs'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'MAILSPOOL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'MAILSPOOL='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'MAILSPOOL='> name:MAILSPOOL) op: assign_op.Equal rhs: {(DQ <'/var/mail'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'SIGKILL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SIGKILL='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SIGKILL='> name:SIGKILL) op: assign_op.Equal rhs: {(DQ <-KILL>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TEMPDIRS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEMPDIRS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEMPDIRS='> name:TEMPDIRS) op: assign_op.Equal rhs: {(DQ <'/tmp /var/tmp'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'THISCMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'THISCMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'THISCMD='> name:THISCMD) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <'/usr/bin/basename'> more_env: [] words: [{<'/usr/bin/basename'>} {($ Id.VSub_Number 0)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PWCMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PWCMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PWCMD='> name:PWCMD) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name PWCMD> var_name: PWCMD suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <sbin> <Id.Lit_Slash '/'> <pw>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.ShFunction name_tok: <err> name: err body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name THISCMD) <Id.Lit_Colon ':'>} {($ Id.VSub_Star '*')}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <verbose> name: verbose body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName vflag))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <rm_files> name: rm_files body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-n>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'login='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'login='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'login='> name:login) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'totalcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'totalcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'totalcount='> name:totalcount) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [_dir] iterable: (for_iter.Words words:[{(${ Id.VSub_Name TEMPDIRS)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'filecount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'filecount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'filecount='> name:filecount) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-d>} {($ Id.VSub_DollarName _dir)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <err> more_env: [] words: [ {<err>} {(DQ ($ Id.VSub_DollarName _dir) <' is not a valid directory.'>)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] spids: [271 284] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} { (DQ <'Removing files owned by ('> ($ Id.VSub_DollarName login) <') in '> ($ Id.VSub_DollarName _dir) <':'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'filecount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'filecount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'filecount='> name:filecount) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <find> more_env: [] words: [ {<find>} {(DQ ($ Id.VSub_DollarName _dir))} {<-user>} {(DQ ($ Id.VSub_DollarName login))} {<-delete>} {<-print>} ] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/ *//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' '> ($ Id.VSub_DollarName filecount) <' removed.'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'totalcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'totalcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'totalcount='> name:totalcount) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName totalcount)} right: {($ Id.VSub_DollarName filecount)} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName totalcount)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' files('> ($ Id.VSub_DollarName totalcount) <')'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <rm_mail> name: rm_mail body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-n>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'login='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'login='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'login='> name:login) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} {(DQ <'Removing mail spool(s) for ('> ($ Id.VSub_DollarName login) <'):'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(${ Id.VSub_Name MAILSPOOL) <'/'> ($ Id.VSub_DollarName login)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} { (DQ <' '> (${ Id.VSub_Name MAILSPOOL) <'/'> ($ Id.VSub_DollarName login)) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' mailspool'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {(${ Id.VSub_Name MAILSPOOL) <'/'> ($ Id.VSub_DollarName login)}] redirects: [] do_fork: T ) ] spids: [474 489] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(${ Id.VSub_Name MAILSPOOL) <'/.'> (${ Id.VSub_Name login) <.pop>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} { (DQ <' '> (${ Id.VSub_Name MAILSPOOL) <'/.'> (${ Id.VSub_Name login) <.pop>) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' pop3'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {(${ Id.VSub_Name MAILSPOOL) <'/.'> (${ Id.VSub_Name login) <.pop>} ] redirects: [] do_fork: T ) ] spids: [533 551] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <.>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <kill_procs> name: kill_procs body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-n>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'login='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'login='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'login='> name:login) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} { (DQ <'Terminating all processes owned by ('> ($ Id.VSub_DollarName login) <'):'>) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'killcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'killcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'killcount='> name:killcount) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'proclist='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'proclist='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'proclist='> name:proclist) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <ps> more_env: [] words: [{<ps>} {<-U>} {($ Id.VSub_DollarName login)}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-v>} {(SQ <'^\\ *PID'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{print $1}'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [_pid] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName proclist)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <kill> more_env: [] words: [{<kill>} {(${ Id.VSub_Name SIGKILL)} {($ Id.VSub_DollarName _pid)}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'killcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'killcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'killcount='> name:killcount) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName killcount)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <' '> (${ Id.VSub_Name SIGKILL) <' signal sent to '> ($ Id.VSub_DollarName killcount) <' processes.'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName killcount)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' processes('> (${ Id.VSub_Name killcount) <')'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <rm_at_jobs> name: rm_at_jobs body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-n>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'login='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'login='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'login='> name:login) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'atjoblist='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'atjoblist='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'atjoblist='> name:atjoblist) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <find> more_env: [] words: [ {<find>} {(${ Id.VSub_Name ATJOBDIR)} {<-maxdepth>} {<1>} {<-user>} {($ Id.VSub_DollarName login)} {<-print>} ] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'jobcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'jobcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'jobcount='> name:jobcount) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} {(DQ <'Removing at(1) jobs owned by ('> ($ Id.VSub_DollarName login) <'):'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [_atjob] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName atjoblist)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {($ Id.VSub_DollarName _atjob)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'jobcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'jobcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'jobcount='> name:jobcount) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName jobcount)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' '> ($ Id.VSub_DollarName jobcount) <' removed.'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName jobcount)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' at('> ($ Id.VSub_DollarName jobcount) <')'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <rm_crontab> name: rm_crontab body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-n>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'login='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'login='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'login='> name:login) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} {(DQ <'Removing crontab for ('> ($ Id.VSub_DollarName login) <'):'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(${ Id.VSub_Name CRONJOBDIR) <'/'> ($ Id.VSub_DollarName login)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} { (DQ <' '> (${ Id.VSub_Name CRONJOBDIR) <'/'> ($ Id.VSub_DollarName login)) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' crontab'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {(${ Id.VSub_Name CRONJOBDIR) <'/'> ($ Id.VSub_DollarName login)} ] redirects: [] do_fork: T ) ] spids: [1011 1026] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <.>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <rm_ipc> name: rm_ipc body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <'Removing IPC mechanisms'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [i] iterable: (for_iter.Words words:[{<s>} {<m>} {<q>}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Pipeline children: [ (command.Simple blame_tok: <ipcs> more_env: [] words: [{<ipcs>} {<-> ($ Id.VSub_DollarName i)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} {<-v>} {<Id.Lit_VarLike 'i='> ($ Id.VSub_DollarName i)} {<-v>} {<Id.Lit_VarLike 'login='> ($ Id.VSub_Number 1)} {(SQ <'$1 == i && $5 == login { print $2 }'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <xargs> more_env: [] words: [{<xargs>} {<-n>} {<1>} {<ipcrm>} {<-> ($ Id.VSub_DollarName i)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <.>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <rm_user> name: rm_user body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-n>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'login='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'login='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'login='> name:login) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <'Removing user ('> ($ Id.VSub_DollarName login) <')'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName pw_rswitch))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' (including home directory)'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' home'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' passwd'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' from the system:'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <Id.Left_DollarBrace '${'> more_env: [] words: [ {(${ Id.VSub_Name PWCMD)} {<userdel>} {<-n>} {($ Id.VSub_DollarName login)} {($ Id.VSub_DollarName pw_rswitch)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <' Done.'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <prompt_yesno> name: prompt_yesno body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'msg='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'msg='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'msg='> name:msg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ ($ Id.VSub_DollarName msg))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<_ans>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName _ans)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_LBracket '['> pattern: (pat.Words words: [ {<Id.Lit_LBracket '['> <Nn> <Id.Lit_RBracket ']'> <Id.Lit_LBracket '['> <Oo> <Id.Lit_RBracket ']'> } {<Id.Lit_LBracket '['> <Nn> <Id.Lit_RBracket ']'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_LBracket '['> pattern: (pat.Words words: [ {<Id.Lit_LBracket '['> <Yy> <Id.Lit_RBracket ']'> <Id.Lit_LBracket '['> <Ee> <Id.Lit_RBracket ']'> <Id.Lit_LBracket '['> <Ss> <Id.Lit_RBracket ']'> } {<Id.Lit_LBracket '['> <Yy> <Id.Lit_RBracket ']'> <Id.Lit_LBracket '['> <Ee> <Id.Lit_RBracket ']'> } {<Id.Lit_LBracket '['> <Yy> <Id.Lit_RBracket ']'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <show_usage> name: show_usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'usage: '> (${ Id.VSub_Name THISCMD) <' [-yv] [-f file] [user ...]'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' if the -y switch is used, either the -f switch or'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' one or more user names must be given'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'ffile='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ffile='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ffile='> name:ffile) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'fflag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fflag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fflag='> name:fflag) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'procowner='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'procowner='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'procowner='> name:procowner) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'pw_rswitch='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pw_rswitch='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pw_rswitch='> name:pw_rswitch) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'userlist='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'userlist='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'userlist='> name:userlist) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'yflag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'yflag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'yflag='> name:yflag) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'vflag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'vflag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'vflag='> name:vflag) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'procowner='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'procowner='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'procowner='> name:procowner) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <'/usr/bin/id'> more_env: [] words: [{<'/usr/bin/id'>} {<-u>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName procowner))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <err> more_env: [] words: [{<err>} {(SQ <'you must be root (0) to use this utility.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [1576 1594] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'args='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'args='> name:args) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <getopt> more_env: [] words: [{<getopt>} {<yvf> <Id.Lit_Colon ':'>} {($ Id.VSub_Star '*')}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <show_usage> more_env: [] words: [{<show_usage>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [1626 1644] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-->} {($ Id.VSub_DollarName args)}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [_switch] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName _switch)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <-y> pattern: (pat.Words words:[{<-y>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'yflag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'yflag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'yflag='> name:yflag) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <-v> pattern: (pat.Words words:[{<-v>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'vflag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'vflag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'vflag='> name:vflag) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <-f> pattern: (pat.Words words:[{<-f>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'fflag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fflag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fflag='> name:fflag) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ffile='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ffile='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ffile='> name:ffile) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--> pattern: (pat.Words words:[{<-->}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Break break>) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName fflag)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike '_insecure='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_insecure='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_insecure='> name:_insecure) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <find> more_env: [] words: [ {<find>} {($ Id.VSub_DollarName ffile)} {<Id.KW_Bang '!'>} {<-user>} {<0>} {<-or>} {<-perm>} {<Id.Lit_Other '+'> <0022>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName _insecure))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <err> more_env: [] words: [ {<err>} { (DQ <'file ('> ($ Id.VSub_DollarName ffile) <') must be owned by and writeable only by root.'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1794 1807] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ ($ Id.VSub_DollarName ffile))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'userlist='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'userlist='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'userlist='> name:userlist) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName ffile)}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<_user>} {<_junk>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: {($ Id.VSub_DollarName _user)} ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_EscapedChar '\\#'> pattern: (pat.Words words: [ { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\#'> ch: '#' ) <Id.Lit_Star '*'> } {(SQ )} ] ) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-n>} { (DQ ($ Id.VSub_DollarName userlist) <' '> ($ Id.VSub_DollarName _user) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) ] spids: [1827 1840] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1759 1768] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'userlist='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'userlist='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'userlist='> name:userlist) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName userlist) <' '> ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName userlist))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName fflag)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <err> more_env: [] words: [ {<err>} { (DQ <'('> ($ Id.VSub_DollarName ffile) <') does not exist or does not contain any user names.'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1981 1990] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName yflag)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <show_usage> more_env: [] words: [{<show_usage>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [2007 2016] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <'Please enter one or more usernames: '>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<userlist>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1965 1978] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike '_user='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_user='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_user='> name:_user) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike '_uid='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_uid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_uid='> name:_uid) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [_user] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName userlist)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'userrec='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'userrec='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'userrec='> name:userrec) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <pw> more_env: [] words: [{<pw>} {<usershow>} {<-n>} {($ Id.VSub_DollarName _user)}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_QMark '?'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <err> more_env: [] words: [ {<err>} { (DQ <'user ('> ($ Id.VSub_DollarName _user) <') does not exist in the password database.'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] spids: [2095 2113] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike '_uid='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_uid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_uid='> name:_uid) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName userrec)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {<-F> <Id.Lit_Colon ':'>} {(SQ <'{print $3}'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName _uid))} {<Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <err> more_env: [] words: [ {<err>} { (DQ <'user ('> ($ Id.VSub_DollarName _user) <') has uid 0. You may not remove this user.'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] spids: [2152 2169] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName yflag))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Matching password entry:'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName userrec)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <prompt_yesno> more_env: [] words: [ {<prompt_yesno>} {(DQ <'Is this the entry you wish to remove? '>)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Continue continue>)] spids: [2234 2246] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike '_homedir='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_homedir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_homedir='> name:_homedir) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName userrec)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {<-F> <Id.Lit_Colon ':'>} {(SQ <'{print $9}'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <prompt_yesno> more_env: [] words: [ {<prompt_yesno>} { (DQ <'Remove user\'s home directory ('> ($ Id.VSub_DollarName _homedir) <')? '> ) } ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'pw_rswitch='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pw_rswitch='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'pw_rswitch='> name: pw_rswitch ) op: assign_op.Equal rhs: {(DQ <-r>)} ) ] redirects: [] ) ] spids: [2276 2287] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2200 2213] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'pw_rswitch='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pw_rswitch='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pw_rswitch='> name:pw_rswitch) op: assign_op.Equal rhs: {(DQ <-r>)} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <Id.Left_DollarBrace '${'> more_env: [] words: [{(${ Id.VSub_Name PWCMD)} {<lock>} {($ Id.VSub_DollarName _user)}] redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <'Removing user ('> ($ Id.VSub_DollarName _user) <'):'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <rm_crontab> more_env: [] words: [{<rm_crontab>} {($ Id.VSub_DollarName _user)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm_at_jobs> more_env: [] words: [{<rm_at_jobs>} {($ Id.VSub_DollarName _user)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm_ipc> more_env: [] words: [{<rm_ipc>} {($ Id.VSub_DollarName _user)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <kill_procs> more_env: [] words: [{<kill_procs>} {($ Id.VSub_DollarName _user)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm_files> more_env: [] words: [{<rm_files>} {($ Id.VSub_DollarName _user)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm_mail> more_env: [] words: [{<rm_mail>} {($ Id.VSub_DollarName _user)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm_user> more_env: [] words: [{<rm_user>} {($ Id.VSub_DollarName _user)}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <verbose> more_env: [] words: [{<verbose>}] redirects: [] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <.>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] )