loop

Execute a set of commands in a loop, based on a condition or iteration over a list of values.

The loop command allows dynamic iteration over lists or ranges of values, executing a sequence of commands for each iteration. It provides flexibility when working with variable data such as network scans, enabling the execution of different commands depending on the results, without prior knowledge of the number of iterations.

Note

The loop command works with two primary loop conditions: iterating over a list of values (items) or iterating over a numerical range (range).

vars:
  LISTA:
    - one
    - two

commands:
  - type: loop
    cmd: "items(LISTA)"
    commands:
      - type: shell
        cmd: echo hello
      - type: debug
        cmd: $LOOP_ITEM

  - type: loop
    cmd: "range(0, 3)"
    commands:
      - type: shell
        cmd: echo "Index $LOOP_INDEX"
      - type: debug
        cmd: $LOOP_INDEX

Loop with items: This mode iterates over the elements of a list and substitutes each element into the commands. The current item is accessible as the $LOOP_ITEM variable.

Loop with range: This mode iterates over a range of integers. The current index is accessible as the $LOOP_INDEX variable.

Loop until condition is fulfilled This mode iterates indefinitely until the condition is fulfilled. (Checked before every command within the loop) Variables in cmd settings of an until loop command until($VAR1 == $VAR2) will be substituted from the variable store on every iteration of the loop. The current index/iteration of the loop is also accessible as the $LOOP_INDEX variable for the until() condition.

cmd

The loop condition. This defines how the loop should iterate, either over a list or a range of values, or idefinitely until the condition defined in until() is rached.

Type:

str

Required:

True

Examples:

  • items(LISTA): Iterate over the elements of a list named LISTA.

  • range(0, 10): Iterate over a range from 0 to 9.

  • **until($PORT == 7)

break_if

If defined, this condition is checked before every command in the loop. If the condition evaluates to True, break out of the loop. Supports the same operators as only_if.

Type:

str

Required:

False

commands

The list of commands to execute during each iteration of the loop. These commands are executed once per iteration, with loop-specific variables ($LOOP_ITEM or $LOOP_INDEX) available for substitution.

Type:

list[Command]

Required:

True

vars:
  LISTA:
    - port1
    - port2

commands:
  - type: loop
    cmd: "items(LISTA)"
    commands:
      - type: shell
        cmd: "nmap -p $LOOP_ITEM 10.10.10.10"
      - type: debug
        cmd: $LOOP_ITEM

In the above example, each element of LISTA (port1, port2) is substituted into the loop, and an Nmap scan is run for each port.

Example of looping over a range:

vars:
  INDEX_START: 0
  INDEX_END: 5

commands:
  - type: loop
    cmd: "range($INDEX_START, $INDEX_END)"
    commands:
      - type: shell
        cmd: echo "Index is $LOOP_INDEX"
LOOP_ITEM

In items loops, this variable holds the current item from the list being iterated over.

Type:

str

LOOP_INDEX

In range loops, this variable holds the current index of the iteration.

Type:

int