(command.BraceGroup children: [ (C {<.>} {</DietPi/dietpi/func/dietpi-globals>}) (C {<G_CHECK_ROOT_USER>}) (C {<export>} {<Id.Lit_VarLike 'G_PROGRAM_NAME='> (SQ <DietPi-Cron>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PROGRAM_NAME) op: assign_op.Equal rhs: {(DQ <DietPi-Cron>)} spids: [100] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TARGETMENUID) op: assign_op.Equal rhs: {<0>} spids: [107] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PREVIOUS_MENU_SELECTION) op: assign_op.Equal rhs: {(DQ <cron.hourly>)} spids: [111] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTION) op: assign_op.Equal rhs: {<0>} spids: [117] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHOICE) op: assign_op.Equal rhs: {<0>} spids: [121] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:aCRON_TIME) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [125] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:aDAY_OF_THE_WEEK_TEXT) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ {(DQ <Monday>)} {(DQ <Tuesday>)} {(DQ <Wednesday>)} {(DQ <Thursday>)} {(DQ <Friday>)} {(DQ <Saturday>)} {(DQ <Sunday>)} ] ) } spids: [130] ) ] ) (command.ShFunction name: Read_Cron_Times body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.hourly>)}) (C {<awk>} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) ) } spids: [184] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.daily>)}) (C {<awk>} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) ) } spids: [219] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 2>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.daily>)}) (C {<awk>} {(SQ <'{print $2}'>)}) ] negated: F ) ] ) ) } spids: [249] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 3>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.weekly>)}) (C {<awk>} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) ) } spids: [284] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 4>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.weekly>)}) (C {<awk>} {(SQ <'{print $2}'>)}) ] negated: F ) ] ) ) } spids: [314] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 5>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.weekly>)}) (C {<awk>} {(SQ <'{print $5}'>)}) ] negated: F ) ] ) ) } spids: [344] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 6>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.monthly>)}) (C {<awk>} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) ) } spids: [379] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 7>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.monthly>)}) (C {<awk>} {(SQ <'{print $2}'>)}) ] negated: F ) ] ) ) } spids: [409] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 8>}) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<cat>} {</etc/crontab>}) (C {<grep>} {<-m1>} {(SQ <cron.monthly>)}) (C {<awk>} {(SQ <'{print $3}'>)}) ] negated: F ) ] ) ) } spids: [439] ) ] ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:i) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike i>) right: (arith_expr.ArithWord w: { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) ) update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:i)) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) ) ) } right: {<Id.Lit_Other '^'> <-> <Id.Lit_Other '?'> <Id.Lit_Other '['> <0-9> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other '$'> } ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(DQ <valid>)}] redirects: [ (redir.Redir op: <Id.Redir_AndGreat '&>'> fd: -1 arg_word: {</dev/null>} ) ] ) ] spids: [502 527] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')}) ) op: assign_op.Equal rhs: {<1>} spids: [548] ) ] ) ] ) ] ) ) ] ) ) (command.ShFunction name: Write_Cron_Times body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<_EOF_>} here_end_span_id: 653 stdin_parts: [ <'#Please use dietpi-cron to change cron start times\n'> <'SHELL=/bin/sh\n'> <'PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n'> <'\n'> <'# m h dom mon dow user command\n'> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) <' * * * * root cd / && run-parts --report /etc/cron.hourly\n'> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) <' '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 2>}) ) ) < ' * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )\n' > (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 3>}) ) ) <' '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 4>}) ) ) <' * * '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 5>}) ) ) < ' root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )\n' > (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 6>}) ) ) <' '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 7>}) ) ) <' '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 8>}) ) ) < ' * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )\n' > ] ) (redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</etc/crontab>}) ] ) ] ) ) (command.ShFunction name: Input_Cron_Minute body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'input_value='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'min_value='> <0>}) (C {<local>} {<Id.Lit_VarLike 'max_value='> <59>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [ {<whiptail>} {<--inputbox>} { (DQ <'Please enter a value for MINUTE:'> <Id.Lit_Other '\\'> <'n - Valid range ('> ($ Id.VSub_DollarName '$min_value') <' - '> ($ Id.VSub_DollarName '$max_value') <')'> ) } {<9>} {<50>} {(DQ ($ Id.VSub_DollarName '$input_value'))} {<--title>} {(DQ <'Set Minute'>)} ] redirects: [ (redir.Redir op: <Id.Redir_GreatAnd '3>&'> fd: 3 arg_word: {<1>} ) (redir.Redir op: <Id.Redir_GreatAnd '1>&'> fd: 1 arg_word: {<2>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<3>} ) ] ) ] ) ) } spids: [686] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHOICE) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [727] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_DollarName '$OPTION')} right: {<Id.Lit_Other '^'> <-> <Id.Lit_Other '?'> <Id.Lit_Other '['> <0-9> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other '$'> } ) ) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_GreatEqual left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$OPTION')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$min_value')} ) ) ) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_LessEqual left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$OPTION')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$max_value')} ) ) ) ] ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:input_value) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTION')} spids: [803] ) ] ) ] spids: [753 800] ) ] else_action: [(C {<Info_Input_Not_Valid_Integer>})] ) ] spids: [731 745] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName '$input_value')} ) ] ) ) (command.ShFunction name: Input_Cron_Hour body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'input_value='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'min_value='> <0>}) (C {<local>} {<Id.Lit_VarLike 'max_value='> <23>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [ {<whiptail>} {<--inputbox>} { (DQ <'Please enter a value for HOUR (24h):'> <Id.Lit_Other '\\'> <'n - Valid range ('> ($ Id.VSub_DollarName '$min_value') <' - '> ($ Id.VSub_DollarName '$max_value') <')'> ) } {<9>} {<50>} {(DQ ($ Id.VSub_DollarName '$input_value'))} {<--title>} {(DQ <'Set Hour'>)} ] redirects: [ (redir.Redir op: <Id.Redir_GreatAnd '3>&'> fd: 3 arg_word: {<1>} ) (redir.Redir op: <Id.Redir_GreatAnd '1>&'> fd: 1 arg_word: {<2>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<3>} ) ] ) ] ) ) } spids: [856] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHOICE) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [897] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_DollarName '$OPTION')} right: {<Id.Lit_Other '^'> <-> <Id.Lit_Other '?'> <Id.Lit_Other '['> <0-9> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other '$'> } ) ) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_GreatEqual left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$OPTION')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$min_value')} ) ) ) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_LessEqual left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$OPTION')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$max_value')} ) ) ) ] ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:input_value) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTION')} spids: [973] ) ] ) ] spids: [923 970] ) ] else_action: [(C {<Info_Input_Not_Valid_Integer>})] ) ] spids: [901 915] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName '$input_value')} ) ] ) ) (command.ShFunction name: Input_Cron_DayOfWeek body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'input_value='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'min_value='> <1>}) (C {<local>} {<Id.Lit_VarLike 'max_value='> <7>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [ {<whiptail>} {<--title>} {(DQ <'Day of the Week'>)} {<--menu>} {(DQ <'Please select a day of the week.'>)} {<--cancel-button>} {(DQ <Cancel>)} {<--default-item>} {(DQ ($ Id.VSub_DollarName '$input_value'))} {<15>} {<45>} {<7>} {(DQ <1>)} { (DQ (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) ) } {(DQ <2>)} { (DQ (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } {(DQ <3>)} { (DQ (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 2>}) ) ) ) } {(DQ <4>)} { (DQ (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 3>}) ) ) ) } {(DQ <5>)} { (DQ (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 4>}) ) ) ) } {(DQ <6>)} { (DQ (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 5>}) ) ) ) } {(DQ <7>)} { (DQ (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 6>}) ) ) ) } ] redirects: [ (redir.Redir op: <Id.Redir_GreatAnd '3>&'> fd: 3 arg_word: {<1>} ) (redir.Redir op: <Id.Redir_GreatAnd '1>&'> fd: 1 arg_word: {<2>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<3>} ) ] ) ] ) ) } spids: [1026] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:input_value) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTION')} spids: [1194] ) ] ) ] spids: [1177 1191] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName '$input_value')} ) ] ) ) (command.ShFunction name: Input_Cron_DayOfMonth body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'input_value='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'min_value='> <1>}) (C {<local>} {<Id.Lit_VarLike 'max_value='> <28>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [ {<whiptail>} {<--inputbox>} { (DQ <'Please enter a value for DAY of the MONTH:'> <Id.Lit_Other '\\'> <'n - Valid range ('> ($ Id.VSub_DollarName '$min_value') <' - '> ($ Id.VSub_DollarName '$max_value') <')'> <Id.Lit_Other '\\'> <'n - eg: 11 = the 11th day of month'> ) } {<10>} {<50>} {(DQ ($ Id.VSub_DollarName '$input_value'))} {<--title>} {(DQ <'Set Day of Month'>)} ] redirects: [ (redir.Redir op: <Id.Redir_GreatAnd '3>&'> fd: 3 arg_word: {<1>} ) (redir.Redir op: <Id.Redir_GreatAnd '1>&'> fd: 1 arg_word: {<2>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<3>} ) ] ) ] ) ) } spids: [1238] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHOICE) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1281] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_DollarName '$OPTION')} right: {<Id.Lit_Other '^'> <-> <Id.Lit_Other '?'> <Id.Lit_Other '['> <0-9> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other '$'> } ) ) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_GreatEqual left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$OPTION')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$min_value')} ) ) ) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_LessEqual left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$OPTION')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$max_value')} ) ) ) ] ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:input_value) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTION')} spids: [1357] ) ] ) ] spids: [1307 1354] ) ] else_action: [(C {<Info_Input_Not_Valid_Integer>})] ) ] spids: [1285 1299] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName '$input_value')} ) ] ) ) (command.ShFunction name: Info_Input_Not_Valid_Integer body: (command.BraceGroup children: [ (C {<whiptail>} {<--title>} {(DQ <'Invalid Value'>)} {<--msgbox>} {(DQ ($ Id.VSub_DollarName '$OPTION') <' is an invalid value.'>)} {<--backtitle>} {(DQ ($ Id.VSub_DollarName '$WHIP_BACKTITLE'))} {<9>} {<60>} ) ] ) ) (command.ShFunction name: Menu_Exit body: (command.BraceGroup children: [ (C {<whiptail>} {<--title>} {(DQ <'Exit '> ($ Id.VSub_DollarName '$PROGRAM_NAME') <'?'>)} {<--yesno>} {(DQ <'Exit '> ($ Id.VSub_DollarName '$PROGRAM_NAME') <'?'>)} {<--backtitle>} {(DQ ($ Id.VSub_DollarName '$PROGRAM_NAME'))} {<--yes-button>} {(DQ <Ok>)} {<--no-button>} {(DQ <Back>)} {<--defaultno>} {<9>} {<55>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHOICE) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1471] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TARGETMENUID) op: assign_op.Equal rhs: {<-1>} spids: [1496] ) ] ) ] spids: [1475 1489] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TARGETMENUID) op: assign_op.Equal rhs: {<0>} spids: [1507] ) ] ) ] ) ] ) ) (command.ShFunction name: Menu_Main body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [ {<whiptail>} {<--title>} {(DQ ($ Id.VSub_DollarName '$PROGRAM_NAME'))} {<--menu>} { (DQ < 'This program allows you to change the date and times for starting each cron job.' > <Id.Lit_Other '\\'> <n> <Id.Lit_Other '\\'> <'n- Example:'> <Id.Lit_Other '\\'> < 'nIf you set cron.daily to 22 hours and 20 minutes, all scripts in /etc/cron.daily/* will be run at 10:20pm' > ) } {<--cancel-button>} {(DQ <Exit>)} {<--default-item>} {(DQ ($ Id.VSub_DollarName '$PREVIOUS_MENU_SELECTION'))} {<--backtitle>} {(DQ ($ Id.VSub_DollarName '$PROGRAM_NAME'))} {<18>} {<70>} {<5>} {(DQ <cron.hourly>)} { (DQ <'Every Hour at '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) <' Minutes'> ) } {(DQ <cron.daily>)} { (DQ <'Every Day at '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 2>}) ) ) <' Hours and '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) <' Minutes'> ) } {(DQ <cron.weekly>)} { (DQ <'Every '> (braced_var_sub token: <Id.VSub_Name aDAY_OF_THE_WEEK_TEXT> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {<Id.Lit_Digits 5>} ) ) ) } ) right: (arith_expr.ArithWord w: {<Id.Lit_Digits 1>} ) ) ) } ) ) ) <' at '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 4>}) ) ) <' Hours and '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 3>}) ) ) <' Minutes'> ) } {(DQ <cron.monthly>)} { (DQ <'On Day '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 8>}) ) ) <' of the month at '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 7>}) ) ) <' Hours and '> (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 6>}) ) ) <' Minutes'> ) } {(DQ <Apply>)} {(DQ <'Saves your cron start times and restarts service.'>)} ] redirects: [ (redir.Redir op: <Id.Redir_GreatAnd '3>&'> fd: 3 arg_word: {<1>} ) (redir.Redir op: <Id.Redir_GreatAnd '1>&'> fd: 1 arg_word: {<2>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<3>} ) ] ) ] ) ) } spids: [1525] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHOICE) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1709] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PREVIOUS_MENU_SELECTION) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTION')} spids: [1731] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$OPTION'))} arms: [ (case_arm pat_list: [{(DQ <cron.hourly>)}] action: [ (C {<Input_Cron_Minute>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1761] ) ] ) ] spids: [1745 1748 1769 -1] ) (case_arm pat_list: [{(DQ <cron.daily>)}] action: [ (C {<Input_Cron_Hour>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 2>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 2>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1788] ) ] ) (C {<Input_Cron_Minute>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1807] ) ] ) ] spids: [1772 1775 1815 -1] ) (case_arm pat_list: [{(DQ <cron.weekly>)}] action: [ (C {<Input_Cron_DayOfWeek>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 5>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 5>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1834] ) ] ) (C {<Input_Cron_Hour>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 4>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 4>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1853] ) ] ) (C {<Input_Cron_Minute>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 3>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 3>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1872] ) ] ) ] spids: [1818 1821 1880 -1] ) (case_arm pat_list: [{(DQ <cron.monthly>)}] action: [ (C {<Input_Cron_DayOfMonth>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 8>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 8>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1899] ) ] ) (C {<Input_Cron_Hour>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 7>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 7>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1918] ) ] ) (C {<Input_Cron_Minute>} { (braced_var_sub token: <Id.VSub_Name aCRON_TIME> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 6>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: aCRON_TIME index: (arith_expr.ArithWord w:{<Id.Lit_Digits 6>}) ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1937] ) ] ) ] spids: [1883 1886 1945 -1] ) (case_arm pat_list: [{(DQ <Apply>)}] action: [ (C {<Write_Cron_Times>}) (C {<systemctl>} {<restart>} {<cron>}) (C {<whiptail>} {<--title>} {(DQ <Completed>)} {<--msgbox>} {(DQ <'Your Cron start times have been saved and applied.'>)} {<9>} {<60>} ) ] spids: [1948 1951 1992 -1] ) ] ) ] spids: [1713 1727] ) ] else_action: [(C {<Menu_Exit>})] ) ] ) ) (C {<Read_Cron_Times>}) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Great left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$TARGETMENUID')}) right: (arith_expr.Unary op_id: Id.Node_UnaryMinus child: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (C {<clear>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$TARGETMENUID')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) terminator: <Id.Op_Semi _> ) ] action: [(C {<Menu_Main>})] spids: [2071 2085] ) ] ) ] ) ) (C {<unset>} {<aDAY_OF_THE_WEEK_TEXT>}) (C {<unset>} {<aCRON_TIME>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] )