(command.CommandList children: [ (command.ShFunction name: Usage body: (command.BraceGroup children: [ (command.Simple words: [ {(echo)} { (DQ ('Usage: ') (command_sub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [(C {(basename)} {($ VSub_Number '$0')})] ) ) (' mon|tue|... [next]|week|last') ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] ) ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_LBracket '[')} {(DQ ($ VSub_Pound '$#'))} {(-eq)} {(DQ (0))} {(Lit_RBracket ']')}) (C {(Usage)}) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:day) op:Equal rhs:{($ VSub_Number '$1')})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:which) op:Equal rhs:{($ VSub_Number '$2')})] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_LBracket '[')} {(-z)} {(DQ ($ VSub_DollarName '$which'))} {(Lit_RBracket ']')}) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:which) op:Equal rhs:{(next)})] ) ] ) (command.Case to_match: {($ VSub_DollarName '$which')} arms: [ (case_arm pat_list: [{(week)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_LBracket '[')} { (command_sub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [(C {(date)} {(Lit_Other '+') (Lit_Other '%') (D)})] ) ) } {(Lit_Equals '=')} { (command_sub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [ (C {(date)} {(--date) (Lit_Equals '=') (DQ ('next ') ($ VSub_DollarName '$day')) } {(Lit_Other '+') (Lit_Other '%') (D)} ) ] ) ) } {(Lit_RBracket ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:weeks) op: Equal rhs: {(Lit_Other '+') (2)} ) ] ) ] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:weeks) op: Equal rhs: {(Lit_Other '+') (1)} ) ] ) ] ) ] ) (case_arm pat_list: [{(last)}] action: [ (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:weeks) op:Equal rhs:{(-1)})] ) ] ) (case_arm pat_list: [{(next)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_LBracket '[')} { (command_sub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [(C {(date)} {(Lit_Other '+') (Lit_Other '%') (D)})] ) ) } {(Lit_Equals '=')} { (command_sub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [ (C {(date)} {(--date) (Lit_Equals '=') (DQ ('next ') ($ VSub_DollarName '$day')) } {(Lit_Other '+') (Lit_Other '%') (D)} ) ] ) ) } {(Lit_RBracket ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:weeks) op: Equal rhs: {(Lit_Other '+') (1)} ) ] ) ] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:weeks) op: Equal rhs: {(Lit_Other '+') (0)} ) ] ) ] ) ] ) (case_arm pat_list:[{(Lit_Star '*')}] action:[(C {(Usage)})]) ] ) (C {(date)} {(--date) (Lit_Equals '=') (DQ ($ VSub_DollarName '$day') (' ') ($ VSub_DollarName '$weeks') (' weeks')) } {(Lit_Other '+') (Lit_Other '%') (x)} ) ] )