# CHIP Shell Reference

The `chip-shell` firmware exposes configuration and management APIs via a
command line interface (CLI). Use the shell CLI to experiment with CHIP
interactively, which can also be used with additional application code. The CHIP
functional test scripts use the shell CLI to execute test cases.

## Separator and escaping characters

The whitespace character (`' '`) is used to delimit the command name and the
different arguments, together with tab (`'\t'`) and new line characters (`'\r'`,
`'\n'`).

Some arguments might require to accept whitespaces on them. For those cases the
backslash character (`'\'`) can be used to escape separators or the backslash
itself.

Example:

```bash
> networkname Test\ Network
Done
> networkname
Test Network
Done
>
```

## CHIP Shell Command List

-   [base64](#base64-decode-b64_string)
-   [device](README_DEVICE.md)
-   [echo](#echo-string)
-   [exit](#exit)
-   [help](#help)
-   [otcli](README_OTCLI.md)
-   [ping](#ping)
-   [rand](#rand)
-   [version](#version)

## CHIP Shell Command Details

### help

Display a list of all top-level commands supported and a brief description.

```bash
> help
  echo            Echo back provided inputs
  log             Logging utilities
  rand            Random number utilities
  base64          Base64 encode / decode utilities
  device          Device Layer commands
  otcli           Dispatch OpenThread CLI command
  ping            Using Echo Protocol to measure packet loss across network paths
  exit            Exit the shell application
  help            List out all top level commands
  version         Output the software version
Done
```

### base64 decode \<b64_string\>

Decode the given base64 string into hex.

```bash
> base64 decode EjQ=
1234
Done
```

### base64 encode \<hex_string\>

Decode the given hex string into base64.

```bash
> base64 encode 1234
EjQ=
Done
```

### echo \<string\>

Echo back the provided string to the terminal.

```bash
> echo hello
hello
Done
```

### exit

Exit the shell terminal. On an embedded system this may trigger a watchdog
reset.

```bash
> exit
Goodbye
```

### rand

Output a single byte random number.

```bash
> rand
103
Done
```

### version

Output the version of the CHIP stack.

```bash
> version
CHIP 0.0.g54591338-dirty
Done
```
