(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:doit)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name DOITPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(SQ )})
                  spids: [42 45]
                )
              )
            }
          spids: [40]
        )
      ]
      spids: [40]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:mvprog)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name MVPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(mv)})
                  spids: [56 60]
                )
              )
            }
          spids: [54]
        )
      ]
      spids: [54]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:cpprog)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name CPPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(cp)})
                  spids: [65 69]
                )
              )
            }
          spids: [63]
        )
      ]
      spids: [63]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:chmodprog)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name CHMODPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(chmod)})
                  spids: [74 78]
                )
              )
            }
          spids: [72]
        )
      ]
      spids: [72]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:chownprog)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name CHOWNPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(chown)})
                  spids: [83 87]
                )
              )
            }
          spids: [81]
        )
      ]
      spids: [81]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:chgrpprog)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name CHGRPPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(chgrp)})
                  spids: [92 96]
                )
              )
            }
          spids: [90]
        )
      ]
      spids: [90]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:stripprog)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name STRIPPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(strip)})
                  spids: [101 105]
                )
              )
            }
          spids: [99]
        )
      ]
      spids: [99]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:rmprog)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name RMPROG>
                  suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(rm)})
                  spids: [110 114]
                )
              )
            }
          spids: [108]
        )
      ]
      spids: [108]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:instcmd)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$mvprog'))}
          spids: [118]
        )
      ]
      spids: [118]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:chmodcmd) op:Equal rhs:{(DQ )} spids:[123])]
      spids: [123]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:chowncmd) op:Equal rhs:{(DQ )} spids:[127])]
      spids: [127]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:chgrpcmd) op:Equal rhs:{(DQ )} spids:[131])]
      spids: [131]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:stripcmd) op:Equal rhs:{(DQ )} spids:[135])]
      spids: [135]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:rmcmd)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$rmprog') (' -f'))}
          spids: [139]
        )
      ]
      spids: [139]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:mvcmd)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$mvprog'))}
          spids: [145]
        )
      ]
      spids: [145]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:src) op:Equal rhs:{(DQ )} spids:[150])]
      spids: [150]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:dst) op:Equal rhs:{(DQ )} spids:[154])]
      spids: [154]
    )
    (While
      cond: [
        (Sentence
          child: 
            (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Number '$1'))} {(KW_Bang '!') (Lit_Other '=')} {(x)} 
              {(Lit_Other ']')}
            )
          terminator: <Op_Semi ';'>
        )
      ]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(-c)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:instcmd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$cpprog'))}
                          spids: [189]
                        )
                      ]
                      spids: [189]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [186 187 199 -1]
                )
                (case_arm
                  pat_list: [{(-m)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:chmodcmd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$chmodprog') (' ') ($ VSub_Number '$2'))}
                          spids: [206]
                        )
                      ]
                      spids: [206]
                    )
                    (C {(shift)})
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [203 204 221 -1]
                )
                (case_arm
                  pat_list: [{(-o)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:chowncmd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$chownprog') (' ') ($ VSub_Number '$2'))}
                          spids: [228]
                        )
                      ]
                      spids: [228]
                    )
                    (C {(shift)})
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [225 226 243 -1]
                )
                (case_arm
                  pat_list: [{(-g)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:chgrpcmd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$chgrpprog') (' ') ($ VSub_Number '$2'))}
                          spids: [250]
                        )
                      ]
                      spids: [250]
                    )
                    (C {(shift)})
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [247 248 265 -1]
                )
                (case_arm
                  pat_list: [{(-s)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:stripcmd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$stripprog'))}
                          spids: [272]
                        )
                      ]
                      spids: [272]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [269 270 282 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Name '$src'))} {(Lit_Other '=')} {(x)} 
                              {(Lit_Other ']')}
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:src)
                                  op: Equal
                                  rhs: {($ VSub_Number '$1')}
                                  spids: [308]
                                )
                              ]
                              spids: [308]
                            )
                          ]
                          spids: [-1 305]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:dst)
                              op: Equal
                              rhs: {($ VSub_Number '$1')}
                              spids: [315]
                            )
                          ]
                          spids: [315]
                        )
                      ]
                      spids: [312 319]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [286 287 326 -1]
                )
              ]
              spids: [179 183 329]
            )
          ]
          spids: [176 331]
        )
    )
    (If
      arms: [
        (if_arm
          cond: [
            (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Name '$src'))} {(Lit_Other '=')} {(x)} {(Lit_Other ']')})
          ]
          action: [(C {(echo)} {(DQ ('install:  no input file specified'))}) (C {(exit)} {(1)})]
          spids: [-1 349]
        )
      ]
      spids: [-1 363]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Name '$dst'))} {(Lit_Other '=')} {(x)} {(Lit_Other ']')})
          ]
          action: [(C {(echo)} {(DQ ('install:  no destination specified'))}) (C {(exit)} {(1)})]
          spids: [-1 381]
        )
      ]
      spids: [-1 395]
    )
    (If
      arms: [
        (if_arm
          cond: [(C {(Lit_Other '[')} {(-d)} {($ VSub_Name '$dst')} {(Lit_Other ']')})]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dst)
                  op: Equal
                  rhs: 
                    {(DQ ($ VSub_Name '$dst')) (/) 
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$src')})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [424 428]
                      )
                    }
                  spids: [419]
                )
              ]
              spids: [419]
            )
          ]
          spids: [-1 416]
        )
      ]
      spids: [-1 430]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:dstdir)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(dirname)} {($ VSub_Name '$dst')})])
                left_token: <Left_Backtick '`'>
                spids: [438 442]
              )
            }
          spids: [437]
        )
      ]
      spids: [437]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:dsttmp)
          op: Equal
          rhs: 
            {($ VSub_Name '$dstdir') (/) (Lit_Pound '#') (inst.) ($ VSub_Dollar '$$') (Lit_Pound '#')}
          spids: [444]
        )
      ]
      spids: [444]
    )
    (C {($ VSub_Name '$doit')} {($ VSub_Name '$instcmd')} {($ VSub_Name '$src')} 
      {($ VSub_Name '$dsttmp')}
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Name '$chowncmd'))} 
                  {(KW_Bang '!') (Lit_Other '=')} {(x)} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Sentence
              child: (C {($ VSub_Name '$doit')} {($ VSub_Name '$chowncmd')} {($ VSub_Name '$dsttmp')})
              terminator: <Op_Semi ';'>
            )
          ]
          spids: [-1 487]
        )
      ]
      spids: [-1 496]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Name '$chgrpcmd'))} 
                  {(KW_Bang '!') (Lit_Other '=')} {(x)} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Sentence
              child: (C {($ VSub_Name '$doit')} {($ VSub_Name '$chgrpcmd')} {($ VSub_Name '$dsttmp')})
              terminator: <Op_Semi ';'>
            )
          ]
          spids: [-1 515]
        )
      ]
      spids: [-1 524]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Name '$stripcmd'))} 
                  {(KW_Bang '!') (Lit_Other '=')} {(x)} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Sentence
              child: (C {($ VSub_Name '$doit')} {($ VSub_Name '$stripcmd')} {($ VSub_Name '$dsttmp')})
              terminator: <Op_Semi ';'>
            )
          ]
          spids: [-1 543]
        )
      ]
      spids: [-1 552]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(x) (DQ ($ VSub_Name '$chmodcmd'))} 
                  {(KW_Bang '!') (Lit_Other '=')} {(x)} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Sentence
              child: (C {($ VSub_Name '$doit')} {($ VSub_Name '$chmodcmd')} {($ VSub_Name '$dsttmp')})
              terminator: <Op_Semi ';'>
            )
          ]
          spids: [-1 571]
        )
      ]
      spids: [-1 580]
    )
    (C {($ VSub_Name '$doit')} {($ VSub_Name '$rmcmd')} {($ VSub_Name '$dst')})
    (C {($ VSub_Name '$doit')} {($ VSub_Name '$mvcmd')} {($ VSub_Name '$dsttmp')} {($ VSub_Name '$dst')})
    (C {(exit)} {(0)})
  ]
)