(CommandList children: [ (FuncDef name: validNum body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:num) op: Equal rhs: {($ VSub_Number '$1')} spids: [44] ) (assign_pair lhs: (LhsName name:max) op: Equal rhs: {($ VSub_Number '$2')} spids: [47] ) ] spids: [44] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$num'))} {(Lit_Other '=')} {(DQ (X))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [16777215 79] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-z)} { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$num')}) (C {(sed)} {(SQ <'s/[[:digit:]]//g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [95 107] ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [87 113] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Name '$num')} {(-gt)} {($ VSub_Name '$max')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [125 139] ) ] else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [151 159] ) ] spids: [33] ) spids: [29 32] ) (FuncDef name: validDay body: (BraceGroup children: [ (Case to_match: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Number '$1')}) (C {(tr)} {(SQ <'[:upper:]'>)} {(SQ <'[:lower:]'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [182 198] ) } arms: [ (case_arm pat_list: [ {(sun) (Lit_Other '*')} {(mon) (Lit_Other '*')} {(tue) (Lit_Other '*')} {(wed) (Lit_Other '*')} {(thu) (Lit_Other '*')} {(fri) (Lit_Other '*')} {(sat) (Lit_Other '*')} ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [203 223 229 16777215] ) (case_arm pat_list: [{(X)}] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [232 233 239 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [245 246 16777215 253] ) ] spids: [180 200 253] ) ] spids: [168] ) spids: [164 167] ) (FuncDef name: validMon body: (BraceGroup children: [ (Case to_match: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Number '$1')}) (C {(tr)} {(SQ <'[:upper:]'>)} {(SQ <'[:lower:]'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [272 288] ) } arms: [ (case_arm pat_list: [ {(jan) (Lit_Other '*')} {(feb) (Lit_Other '*')} {(mar) (Lit_Other '*')} {(apr) (Lit_Other '*')} {(may)} {(jun) (Lit_Other '*')} {(jul) (Lit_Other '*')} {(aug) (Lit_Other '*')} ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [294 316 322 16777215] ) (case_arm pat_list: [ {(sep) (Lit_Other '*')} {(oct) (Lit_Other '*')} {(nov) (Lit_Other '*')} {(dec) (Lit_Other '*')} ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [325 336 342 16777215] ) (case_arm pat_list: [{(X)}] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [345 346 352 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [358 359 365 16777215] ) ] spids: [270 290 368] ) ] spids: [262] ) spids: [258 261] ) (FuncDef name: fixvars body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sourceline) op: Equal rhs: { (DQ ($ VSub_Name '$min') (' ') ($ VSub_Name '$hour') (' ') ($ VSub_Name '$dom') (' ') ($ VSub_Name '$mon') (' ') ($ VSub_Name '$dow') (' ') ($ VSub_Name '$command') ) } spids: [389] ) ] spids: [389] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:min) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$min'))}) (C {(tr)} {(SQ <'*'>)} {(SQ <X>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [406 424] ) } spids: [405] ) ] spids: [405] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:hour) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$hour'))}) (C {(tr)} {(SQ <'*'>)} {(SQ <X>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [431 449] ) } spids: [430] ) ] spids: [430] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:dom) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$dom'))}) (C {(tr)} {(SQ <'*'>)} {(SQ <X>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [456 474] ) } spids: [455] ) ] spids: [455] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:mon) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$mon'))}) (C {(tr)} {(SQ <'*'>)} {(SQ <X>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [481 499] ) } spids: [480] ) ] spids: [480] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:dow) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$dow'))}) (C {(tr)} {(SQ <'*'>)} {(SQ <X>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [506 524] ) } spids: [505] ) ] spids: [505] ) ] spids: [377] ) spids: [373 376] ) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DPipe] children: [ (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-ne)} {(1)} {(Lit_Other ']')}) (C {(Lit_Other '[')} {(KW_Bang '!')} {(-r)} {($ VSub_Number '$1')} {(Lit_Other ']')}) ] ) terminator: <Op_Semi ';'> ) ] action: [ (Sentence child: (SimpleCommand words: [{(echo)} {(DQ ('Usage: ') ($ VSub_Number '$0') (' usercrontabfile'))}] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) terminator: <Op_Semi ';'> ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 558] ) ] spids: [16777215 581] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs:(LhsName name:lines) op:Equal rhs:{(0)} spids:[584]) (assign_pair lhs:(LhsName name:entries) op:Equal rhs:{(0)} spids:[587]) (assign_pair lhs:(LhsName name:totalerrors) op:Equal rhs:{(0)} spids:[590]) ] spids: [584] ) (WhileUntil keyword: <KW_While while> cond: [(C {(read)} {(min)} {(hour)} {(dom)} {(mon)} {(dow)} {(command)})] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:lines) op: Equal rhs: { (DQ (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$lines')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [619 628] ) ) } spids: [617] ) ] spids: [617] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:errors) op:Equal rhs:{(0)} spids:[633])] spids: [633] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$min'))} {(-o)} { (DQ (BracedVarSub token: <VSub_Name min> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: { (BracedVarSub token: <VSub_Name min> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('?')}) spids: [655 659] ) } ) spids: [652 660] ) ) } {(Lit_Other '=')} {(DQ ('#'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Continue continue>)] spids: [16777215 673] ) ] spids: [16777215 686] ) (DParen child: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:entries)) spids: [691 695] ) (C {(fixvars)}) (ForEach iter_name: minslice iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$min'))}) (C {(sed)} {(SQ <'s/[,-]/ /g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [727 741] ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(validNum)} {($ VSub_Name '$minslice')} {(60)})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Line ') (${ VSub_Name lines) (': Invalid minute value ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Name '$minslice') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:errors) op: Equal rhs: {(1)} spids: [777] ) ] spids: [777] ) ] spids: [16777215 760] ) ] spids: [16777215 781] ) ] spids: [745 784] ) spids: [726 743] ) (ForEach iter_name: hrslice iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$hour'))}) (C {(sed)} {(SQ <'s/[,-]/ /g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [800 814] ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(validNum)} {($ VSub_Name '$hrslice')} {(24)})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Line ') (${ VSub_Name lines) (': Invalid hour value ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Name '$hrslice') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:errors) op: Equal rhs: {(1)} spids: [851] ) ] spids: [851] ) ] spids: [16777215 833] ) ] spids: [16777215 855] ) ] spids: [818 858] ) spids: [799 816] ) (ForEach iter_name: domslice iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$dom')}) (C {(sed)} {(SQ <'s/[,-]/ /g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [873 885] ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(validNum)} {($ VSub_Name '$domslice')} {(31)})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Line ') (${ VSub_Name lines) (': Invalid day of month value ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Name '$domslice') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:errors) op: Equal rhs: {(1)} spids: [921] ) ] spids: [921] ) ] spids: [16777215 904] ) ] spids: [16777215 925] ) ] spids: [889 928] ) spids: [872 887] ) (ForEach iter_name: monslice iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$mon'))}) (C {(sed)} {(SQ <'s/[,-]/ /g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [951 965] ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(validNum)} {($ VSub_Name '$monslice')} {(12)})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(validMon)} {(DQ ($ VSub_Name '$monslice'))})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Line ') (${ VSub_Name lines) (': Invalid month value ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Name '$monslice') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:errors) op: Equal rhs: {(1)} spids: [1016] ) ] spids: [1016] ) ] spids: [16777215 999] ) ] spids: [16777215 1020] ) ] spids: [16777215 984] ) ] spids: [16777215 1023] ) ] spids: [969 1026] ) spids: [950 967] ) (ForEach iter_name: dowslice iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$dow'))}) (C {(sed)} {(SQ <'s/[,-]/ /g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [1041 1055] ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(validNum)} {($ VSub_Name '$dowslice')} {(7)})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(validDay)} {($ VSub_Name '$dowslice')})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Line ') (${ VSub_Name lines) (': Invalid day of week value ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_Name '$dowslice') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:errors) op: Equal rhs: {(1)} spids: [1104] ) ] spids: [1104] ) ] spids: [16777215 1087] ) ] spids: [16777215 1108] ) ] spids: [16777215 1074] ) ] spids: [16777215 1111] ) ] spids: [1059 1114] ) spids: [1040 1057] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Name '$errors')} {(-gt)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('>>>> ') (${ VSub_Name lines) (': ') ($ VSub_Name '$sourceline'))}) (C {(echo)} {(DQ )}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:totalerrors) op: Equal rhs: { (DQ (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$totalerrors')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1155 1164] ) ) } spids: [1153] ) ] spids: [1153] ) ] spids: [16777215 1132] ) ] spids: [16777215 1168] ) ] spids: [614 1170] ) redirects: [(Redir op:<Redir_Less '<'> fd:16777215 arg_word:{($ VSub_Number '$1')})] ) (C {(echo)} { (DQ ('Done. Found ') ($ VSub_Name '$totalerrors') (' errors in ') ($ VSub_Name '$entries') (' crontab entries.') ) } ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)}) ] )