---
name: "dnsjit.lib.getopt"
section: "3"
platform: "linux"
package: "dnsjit"
version: "1.5.0-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/dnsjit.lib.getopt"
---

# dnsjit.lib.getopt(3)

Parse and handle arguments

## NAME

dnsjit.lib.getopt - Parse and handle arguments

## SYNOPSIS

  local getopt = require("dnsjit.lib.getopt").new({\
       { "v", "verbose", 0, "Enable verbosity", "?+" },\
       { nil, "host", "localhost", "Set host", "?" },\
       { "p", nil, 53, "Set port", "?" },\
   })

  local left = getopt:parse()

  print("host", getopt:val("host"))\
   print("port", getopt:val("p"))

## DESCRIPTION

A "getopt long" implementation to easily handle command line arguments and display usage. An option is the short name (one character), long name, default value (which also defines the type), help text and extensions. Options are by default required, see extensions to change this.

The Lua types allowed are **boolean**, **string**, **number**.

The extensions available are:

- **?**

  Make the option optional.

- **\***

  For string and number options this make it possible to specified it multiple times and all values will be returned in a table.

- **+**

  For number options this will act as an counter increaser, the value will be the default value + 1 for each time the option is given.

Option *-h* and *--help* are automatically added if the option *--help* is not already defined.

### Attributes

- left

  A table that contains the arguments left after parsing, same as returned by *parse()*.

- usage\_desc

  A string that describes the usage of the program, if not set then the default will be " *program \[options...\]* ".

### Functions

- **Getopt.new**(args)

  Create a new Getopt object. *args* is a table with tables that specifies the options available. Each entry is unpacked and sent to **Getopt:add()**.

- **Getopt:log**()

  Return the Log object to control logging of this instance or module.

- **Getopt:add**(short, long, default, help, extensions)

  Add an option.

- **Getopt:usage**()

  Print the usage.

- **Getopt:parse**(args, startn)

  Parse the options. If *args* is not specified or nil then the global **arg** is used. If *startn* is given, it will start parsing arguments in the table from that position. The default position to start at is 2 for *dnsjit*, see [**dnsjit.core**(3)](/dnsjit.core/3.md).

- **Getopt:val**(name)

  Return the value of an option.

## SEE ALSO

[**dnsjit.core**(3)](/dnsjit.core/3.md)

## AUTHORS and CONTRIBUTORS

Jerry Lundström (DNS-OARC), Tomáš Křížek (CZ.NIC), Petr Špaček (ISC)

Maintained by DNS-OARC

*https://www.dns-oarc.net/*

## BUGS

For issues and feature requests please use:

*https://github.com/DNS-OARC/dnsjit/issues*

For question and help please use:

*admin@dns-oarc.net*
