(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:biggest) op: assign_op.Equal rhs: {(100)} spids: [7] ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:guess) op:assign_op.Equal rhs:{(0)} spids:[13])] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:guesses) op: assign_op.Equal rhs: {(0)} spids: [19] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:number) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$RANDOM')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$biggest')}) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [25] ) ] ) (C {(echo)} {(DQ ('Guess a number between 1 and ') ($ Id.VSub_DollarName '$biggest'))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:52) cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$guess'))} {(-ne)} {($ Id.VSub_DollarName '$number')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:66) ) ] body: (command.DoGroup children: [ (command.Sentence child: (C {(/bin/echo)} {(-n)} {(DQ ('Guess? '))}) terminator: (Token id:Id.Op_Semi val:';' span_id:79) ) (C {(read)} {(guess)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$guess'))} {(-lt)} {($ Id.VSub_DollarName '$number')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:100) ) ] action: [(C {(echo)} {(DQ ('... bigger!'))})] spids: [86 102] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$guess'))} {(-gt)} {($ Id.VSub_DollarName '$number')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:126) ) ] action: [(C {(echo)} {(DQ ('... smaller!'))})] spids: [112 128] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:guesses) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$guesses')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [141] ) ] ) ] ) ) (C {(echo)} { (DQ ('Right!! Guessed ') ($ Id.VSub_DollarName '$number') (' in ') ($ Id.VSub_DollarName '$guesses') (' guesses.') ) } ) (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:167) arg_word:{(0)}) ] )