(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {(/sbin) (Id.Lit_Other ':') (/usr/sbin) (Id.Lit_Other ':') (/bin) (Id.Lit_Other ':') (/usr/bin) } spids: [43] ) ] ) (C {(export)} {(PATH)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:scriptname) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$0'))} spids: [70] ) ] ) (C {(umask)} {(022)}) (command.ShFunction name: on_exit body: (command.BraceGroup children: [ (C {(echo)} { (DQ ("error: '") ($ Id.VSub_DollarName '$scriptname') ("' exited outside the expected code flow.") ) } ) ] ) ) (C {(trap)} {(on_exit)} {(EXIT)}) (C {(trap)} {(DQ (':'))} {(INT)} {(QUIT)} {(TSTP)}) (command.Simple words: [{(stty)} {(onlcr)}] redirects: [ (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'0>&' span_id:131) fd:0 arg_word:{(1)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:runlevel) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$RUNLEVEL')} spids: [139] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Number '$1'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ )} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:runlevel) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [161] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$runlevel'))} {(Id.Lit_Equals '=')} {(DQ )} {(Id.Lit_RBracket ']')} ) ] action: [ (command.Simple words: [{(echo)} {(DQ ('Usage: ') ($ Id.VSub_DollarName '$scriptname') (' <runlevel>'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:190) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:194) arg_word: {(1)} ) ] spids: [164 179] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:previous) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PREVLEVEL')} spids: [200] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$previous'))} {(Id.Lit_Equals '=')} {(DQ )} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:previous) op: assign_op.Equal rhs: {(N)} spids: [218] ) ] ) ] ) (C {(export)} {(runlevel)} {(previous)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(/etc/default/rcS)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:239) ) ] action: [(C {(.)} {(/etc/default/rcS)})] spids: [229 241] ) ] ) (C {(export)} {(VERBOSE)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(/lib/lsb/init-functions)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:265) ) ] action: [(C {(.)} {(/lib/lsb/init-functions)})] spids: [255 267] ) ] else_action: [ (command.ShFunction name: log_action_msg body: (command.BraceGroup children: [ (command.Sentence child: (C {(echo)} {($ Id.VSub_At '$@')}) terminator: (Token id:Id.Op_Semi val:';' span_id:286) ) ] ) ) (command.ShFunction name: log_failure_msg body: (command.BraceGroup children: [ (command.Sentence child: (C {(echo)} {($ Id.VSub_At '$@')}) terminator: (Token id:Id.Op_Semi val:';' span_id:300) ) ] ) ) (command.ShFunction name: log_warning_msg body: (command.BraceGroup children: [ (command.Sentence child: (C {(echo)} {($ Id.VSub_At '$@')}) terminator: (Token id:Id.Op_Semi val:';' span_id:314) ) ] ) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONCURRENCY) op: assign_op.Equal rhs: {(none)} spids: [342] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-s)} {(/etc/init.d/.depend.boot)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONCURRENCY) op: assign_op.Equal rhs: {(DQ (none))} spids: [353] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-s)} {(/etc/init.d/.depend.start)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONCURRENCY) op: assign_op.Equal rhs: {(DQ (none))} spids: [366] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-s)} {(/etc/init.d/.depend.stop)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONCURRENCY) op: assign_op.Equal rhs: {(DQ (none))} spids: [379] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-e)} {(/etc/init.d/.legacy-bootordering)}) terminator: (Token id:Id.Op_Semi val:';' span_id:392) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONCURRENCY) op: assign_op.Equal rhs: {(DQ (none))} spids: [397] ) ] ) ] spids: [384 394] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children:[(C {(test)} {(-e)} {(/proc/stat)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:413) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:427) command_list: (command.CommandList children:[(C {(uname)})]) ) ) } {(Id.Lit_Equals '=')} {(DQ (GNU/kFreeBSD))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:440) ) ] action: [(C {(mount)} {(-t)} {(linprocfs)} {(linprocfs)} {(/proc)})] spids: [422 442] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:461) command_list: (command.CommandList children:[(C {(uname)})]) ) ) } {(Id.Lit_Equals '=')} {(DQ (GNU))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:474) ) ] action: [(C {(mount)} {(-t)} {(Id.KW_Proc proc)} {(none)} {(/proc)})] spids: [456 476] ) ] ) ] spids: [404 415] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-x)} {(/lib/startpar/startpar)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:504) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:STARTPAR) op: assign_op.Equal rhs: {(/lib/startpar/startpar)} spids: [509] ) ] ) ] spids: [494 506] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:STARTPAR) op: assign_op.Equal rhs: {(startpar)} spids: [515] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{($ Id.VSub_DollarName '$STARTPAR')} {(-v)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:524) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:528) fd: 2 arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONCURRENCY) op: assign_op.Equal rhs: {(DQ (none))} spids: [533] ) ] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$CONCURRENCY'))} arms: [ (case_arm pat_list: [{(makefile)} {(startpar)} {(shell)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONCURRENCY) op: assign_op.Equal rhs: {(makefile)} spids: [568] ) ] ) (C {(log_action_msg)} { (DQ ('Using makefile-style concurrent boot in runlevel ') ($ Id.VSub_DollarName '$runlevel') ) } ) (command.ShFunction name: startup body: (command.BraceGroup children: [ (C {(eval)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:590) command_list: (command.CommandList children: [ (C {($ Id.VSub_DollarName '$STARTPAR')} {(-p)} {(4)} {(-t)} {(20)} {(-T)} {(3)} {(-M)} {($ Id.VSub_Number '$1')} {(-P)} {($ Id.VSub_DollarName '$previous')} {(-R)} {($ Id.VSub_DollarName '$runlevel')} ) ] ) ) ) } ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$failed_service'))} {(Id.Lit_RBracket ']')} ) ] action: [ (C {(log_failure_msg)} { (DQ ('startpar: service(s) returned failure: ') ($ Id.VSub_DollarName '$failed_service') ) } ) ] spids: [621 634] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$skipped_service_not_installed'))} {(Id.Lit_RBracket ']')} ) ] action: [ (C {(log_warning_msg)} { (DQ ('startpar: service(s) skipped, program is not installed: ') ($ Id.VSub_DollarName '$skipped_service_not_installed') ) } ) ] spids: [649 662] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$skipped_service_not_configured'))} {(Id.Lit_RBracket ']')} ) ] action: [ (C {(log_warning_msg)} { (DQ ('startpar: service(s) skipped, program is not configured: ') ($ Id.VSub_DollarName '$skipped_service_not_configured') ) } ) ] spids: [677 690] ) ] ) (C {(unset)} {(failed_service)} {(skipped_service_not_installed)} {(skipped_service_not_configured)} ) ] ) ) ] spids: [557 562 717 -1] ) (case_arm pat_list: [{(none)} {(Id.Lit_Star '*')}] action: [ (command.ShFunction name: startup body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:action) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [733] ) ] ) (C {(shift)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:scripts) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_At '$@'))} spids: [740] ) ] ) (command.ForEach iter_name: script iter_words: [{($ Id.VSub_DollarName '$scripts')}] do_arg_iter: F body: (command.DoGroup children: [ (C {($ Id.VSub_DollarName '$debug')} {(DQ ($ Id.VSub_DollarName '$script'))} {($ Id.VSub_DollarName '$action')} ) ] ) ) ] ) ) ] spids: [720 723 774 -1] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(/etc/rc) ($ Id.VSub_DollarName '$runlevel') (.d)} {(Id.Lit_RBracket ']')} ) ] action: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$runlevel'))} arms: [ (case_arm pat_list: [{(0)} {(6)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ACTION) op: assign_op.Equal rhs: {(stop)} spids: [812] ) ] ) ] spids: [806 809 816 -1] ) (case_arm pat_list: [{(S)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ACTION) op: assign_op.Equal rhs: {(start)} spids: [823] ) ] ) ] spids: [819 820 827 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ACTION) op: assign_op.Equal rhs: {(start)} spids: [834] ) ] ) ] spids: [830 831 838 -1] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(makefile)} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$CONCURRENCY'))} {(Id.Lit_RBracket ']')} ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$ACTION'))} {(Id.Lit_Equals '=')} {(DQ (start))} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$previous'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(N)} {(Id.Lit_RBracket ']')} ) ] ) ] action: [(C {(startup)} {(stop)})] spids: [867 899] ) ] ) ] spids: [849 864] ) (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$previous'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(N)} {(Id.Lit_RBracket ']')} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CURLEVEL) op: assign_op.Equal rhs: {(DQ )} spids: [933] ) ] ) (command.ForEach iter_name: s iter_words: [ {(/etc/rc) ($ Id.VSub_DollarName '$runlevel') (.d/K) (Id.Lit_Star '*')} ] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:level) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:s span_id:959) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(Id.Lit_Slash /) (etc) (Id.Lit_Slash /) (rc) ($ Id.VSub_DollarName '$runlevel') (.d) (Id.Lit_Slash /) (K) } ) ) } spids: [957] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:level) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:level span_id:974) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPercent arg_word: {('[a-zA-Z]*')} ) ) } spids: [972] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$level'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$CURLEVEL'))} {(Id.Lit_RBracket ']')} ) ] action: [ (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 1000 ) ) ] spids: [980 997] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CURLEVEL) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$level')} spids: [1006] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SCRIPTS) op: assign_op.Equal rhs: {(DQ )} spids: [1010] ) ] ) (command.ForEach iter_name: i iter_words: [ {(/etc/rc) ($ Id.VSub_DollarName '$runlevel') (.d/K) ($ Id.VSub_DollarName '$level') (Id.Lit_Star '*') } ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {($ Id.VSub_DollarName '$i')} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 1047 ) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:suffix) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:i span_id:1069) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(Id.Lit_Slash /) (etc) (Id.Lit_Slash /) (rc) ($ Id.VSub_DollarName '$runlevel') (.d) (Id.Lit_Slash /) ('K[0-9][0-9]') } ) ) } spids: [1067] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:previous_stop) op: assign_op.Equal rhs: {(/etc/rc) ($ Id.VSub_DollarName '$previous') (.d/K) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') ($ Id.VSub_DollarName '$suffix') } spids: [1082] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:previous_start) op: assign_op.Equal rhs: {(/etc/rc) ($ Id.VSub_DollarName '$previous') (.d/S) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') ($ Id.VSub_DollarName '$suffix') } spids: [1095] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_DollarName '$previous_stop')} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {($ Id.VSub_DollarName '$previous_start')} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 1150 ) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SCRIPTS) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$SCRIPTS') (' ') ($ Id.VSub_DollarName '$i') ) } spids: [1158] ) ] ) ] ) ) (C {(startup)} {(stop)} {($ Id.VSub_DollarName '$SCRIPTS')}) ] ) ) ] spids: [910 926] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(makefile)} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$CONCURRENCY'))} {(Id.Lit_RBracket ']')} ) ] action: [ (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(S)} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$runlevel'))} {(Id.Lit_RBracket ']')} ) ] action: [(C {(startup)} {(boot)})] spids: [1201 1216] ) ] else_action: [(C {(startup)} {($ Id.VSub_DollarName '$ACTION')})] ) ] spids: [1183 1198] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CURLEVEL) op: assign_op.Equal rhs: {(DQ )} spids: [1246] ) ] ) (command.ForEach iter_name: s iter_words: [{(/etc/rc) ($ Id.VSub_DollarName '$runlevel') (.d/S) (Id.Lit_Star '*')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:level) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:s span_id:1272) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(Id.Lit_Slash /) (etc) (Id.Lit_Slash /) (rc) ($ Id.VSub_DollarName '$runlevel') (.d) (Id.Lit_Slash /) (S) } ) ) } spids: [1270] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:level) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:level span_id:1287) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPercent arg_word: {('[a-zA-Z]*')} ) ) } spids: [1285] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$level'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$CURLEVEL'))} {(Id.Lit_RBracket ']')} ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:1313) ) ] spids: [1293 1310] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CURLEVEL) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$level')} spids: [1319] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SCRIPTS) op: assign_op.Equal rhs: {(DQ )} spids: [1323] ) ] ) (command.ForEach iter_name: i iter_words: [ {(/etc/rc) ($ Id.VSub_DollarName '$runlevel') (.d/S) ($ Id.VSub_DollarName '$level') (Id.Lit_Star '*') } ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {($ Id.VSub_DollarName '$i')} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 1356 ) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:suffix) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:i span_id:1362) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(Id.Lit_Slash /) (etc) (Id.Lit_Slash /) (rc) ($ Id.VSub_DollarName '$runlevel') (.d) (Id.Lit_Slash /) ('S[0-9][0-9]') } ) ) } spids: [1360] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$previous'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(N)} {(Id.Lit_RBracket ']')} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stop) op: assign_op.Equal rhs: {(/etc/rc) ($ Id.VSub_DollarName '$runlevel') (.d/K) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') ($ Id.VSub_DollarName '$suffix') } spids: [1410] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:previous_start) op: assign_op.Equal rhs: {(/etc/rc) ($ Id.VSub_DollarName '$previous') (.d/S) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') ($ Id.VSub_DollarName '$suffix') } spids: [1423] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(start)} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$ACTION'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 1470 ) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_DollarName '$previous_start')} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {($ Id.VSub_DollarName '$stop')} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 1497 ) ) ] ) ] spids: [1456 1472] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:previous_stop) op: assign_op.Equal rhs: {(/etc/rc) ($ Id.VSub_DollarName '$previous') (.d/K) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') ($ Id.VSub_DollarName '$suffix') } spids: [1511] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_DollarName '$previous_stop')} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {($ Id.VSub_DollarName '$previous_start')} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 1566 ) ) ] ) ] ) ] spids: [1375 1391] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SCRIPTS) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$SCRIPTS') (' ') ($ Id.VSub_DollarName '$i') ) } spids: [1576] ) ] ) ] ) ) (C {(startup)} {($ Id.VSub_DollarName '$ACTION')} {($ Id.VSub_DollarName '$SCRIPTS')} ) ] ) ) ] ) ] spids: [782 794] ) ] ) (C {(trap)} {(-)} {(EXIT)}) (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:1612) arg_word:{(0)}) ] )