(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {(DQ <'ssh.com key import'>)} spids: [7] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ <X> (${ Id.VSub_Name TEST_COMBASE))} {<Id.Lit_Equals '='>} {(DQ <X>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<fatal>} {(SQ <'$TEST_COMBASE is not set'>)})] spids: [16 36] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERSIONS) op: assign_op.Equal rhs: { (DQ <'\n'> <'\t2.0.10\n'> <'\t2.0.12\n'> <'\t2.0.13\n'> <'\t2.1.0\n'> <'\t2.2.0\n'> <'\t2.3.0\n'> <'\t2.3.1\n'> <'\t2.4.0\n'> <'\t3.0.0\n'> <'\t3.1.0\n'> <'\t3.2.0\n'> <'\t3.2.2\n'> <'\t3.2.3\n'> <'\t3.2.5\n'> <'\t3.2.9\n'> <'\t3.2.9.1\n'> <'\t3.3.0'> ) } spids: [48] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPRV) op: assign_op.Equal rhs: {(${ Id.VSub_Name OBJ) <'/comkey'>} spids: [71] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPUB) op: assign_op.Equal rhs: {(${ Id.VSub_Name COMPRV) <.pub>} spids: [77] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPENSSHPRV) op: assign_op.Equal rhs: {(${ Id.VSub_Name OBJ) <'/opensshkey'>} spids: [83] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPENSSHPUB) op: assign_op.Equal rhs: {(${ Id.VSub_Name OPENSSHPRV) <.pub>} spids: [89] ) ] ) (command.ForEach iter_name: v iter_words: [{(${ Id.VSub_Name VERSIONS)}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keygen) op: assign_op.Equal rhs: {(${ Id.VSub_Name TEST_COMBASE) <'/'> (${ Id.VSub_Name v) <'/ssh-keygen2'>} spids: [113] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-x>} {(${ Id.VSub_Name keygen)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Continue continue>)] spids: [124 139] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:types) op: assign_op.Equal rhs: {(DQ <dss>)} spids: [148] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$v')} arms: [ (case_arm pat_list: [{<2.3.1>} {<3.> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:types) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$types') <' rsa'>)} spids: [168] ) ] ) ] spids: [161 165 175 -1] ) ] ) (command.ForEach iter_name: t iter_words: [{($ Id.VSub_DollarName '$types')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<verbose>} { (DQ <'ssh-keygen '> ($ Id.VSub_DollarName '$v') <'/'> ($ Id.VSub_DollarName '$t') ) } ) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$COMPRV')} {($ Id.VSub_DollarName '$COMPUB')} {($ Id.VSub_DollarName '$OPENSSHPRV')} {($ Id.VSub_DollarName '$OPENSSHPUB')} ) (command.Simple words: [ {(${ Id.VSub_Name keygen)} {<-q>} {<-P>} {<-t>} {($ Id.VSub_DollarName '$t')} {(${ Id.VSub_Name COMPRV)} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ (${ Id.VSub_Name keygen) <' -t '> ($ Id.VSub_DollarName '$t') <' failed'> ) } ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] spids: [240 253] ) ] ) (command.Simple words: [{(${ Id.VSub_Name SSHKEYGEN)} {<-if>} {(${ Id.VSub_Name COMPUB)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name OPENSSHPUB)} ) ] do_fork: T ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ <'import public key ('> ($ Id.VSub_DollarName '$v') <'/'> ($ Id.VSub_DollarName '$t') <') failed'> ) } ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] spids: [291 304] ) ] ) (command.Simple words: [{(${ Id.VSub_Name SSHKEYGEN)} {<-if>} {(${ Id.VSub_Name COMPRV)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name OPENSSHPRV)} ) ] do_fork: T ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ <'import private key ('> ($ Id.VSub_DollarName '$v') <'/'> ($ Id.VSub_DollarName '$t') <') failed'> ) } ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] spids: [341 354] ) ] ) (C {<chmod>} {<600>} {(${ Id.VSub_Name OPENSSHPRV)}) (command.Pipeline children: [ (C {(${ Id.VSub_Name SSHKEYGEN)} {<-yf>} {(${ Id.VSub_Name OPENSSHPRV)}) (C {<diff>} {<->} {(${ Id.VSub_Name OPENSSHPUB)}) ] negated: F ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ <'public keys ('> ($ Id.VSub_DollarName '$v') <'/'> ($ Id.VSub_DollarName '$t') <') differ'> ) } ) ] spids: [405 418] ) ] ) ] ) ) ] ) ) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$COMPRV')} {($ Id.VSub_DollarName '$COMPUB')} {($ Id.VSub_DollarName '$OPENSSHPRV')} {($ Id.VSub_DollarName '$OPENSSHPUB')} ) ] )