The Universal Argument Parser (with long options)

Publicado por Fabio Lima (última atualização em 11/11/2023)

[ Hits: 3.668 ]

Homepage: https://twitter.com/fabiolimace

Download the-universal-argument-parser-whith-long-options.sh




O script disponibilizado aqui é uma melhoria do "Universal Argument Parser" apresentado em um excelente artigo sobre `getopts` do VOL.

Foram feitas modificações para acrescentar suporte simulado às opções longas, isto é, aquelas neste formato: `--opcao-longa`. Todas as modificações estão devidamente documentadas.

Para simular as opções longas, as strings que começam com dois hifens são substituídas por suas opções curtas correspondentes; por exemplo, uma opção longa hipotética chamada `--help` é substituída por `-h`.

O artigo pode ser acessado por meio deste link: https://www.vivaolinux.com.br/artigo/getopts-criando-scripts-Bash-com-parametros-e-argumentos-person...

Todos os créditos do parser universal são do autor do artigo. As modificações feitas aqui são apenas uma contribuição minha à comunidade.

  



Esconder código-fonte

#!/bin/bash

# [MODIFICATION 1]
args=$@ # use builtin string substitution to simulate long options
args=${args//--long-option-a/-a} # replace `--long-option-a` with `-a`
args=${args//--long-option-b/-b} # replace `--long-option-b` with `-b`
args=${args//--long-option-c/-c} # replace `--long-option-c` with `-c`

# [MODIFICATION 2]
# remove unknown long options as 
# they can cause parsing issues
shopt -s extglob
args=${args//--+([a-zA-Z0-9-])/}

## arrays
declare -A options;

# [MODIFICATION 3] 
# define the parameters
# using the silent mode
# set by the leading `:`
OPTSTRING=":a:b:c:d:e:f:"

# [MODIFICATION 4]
# use the modified `$args` instead of `$@`
while getopts "$OPTSTRING" name $args; do

      # if argument parameter was given
      if [[ ${OPTARG} ]]; then
        options[${name}]=${OPTARG};

      # if argument is just a flag
      else
        options[${name}]=${name};
      fi
done;

## shift the $@
shift $(( ${OPTIND} - 1 ));

# [MODIFICATION 5]
# print arguments
printf ' $@: %s\n' "$args"
printf ' -a: %s\n' ${options['a']};
printf ' -b: %s\n' ${options['b']};
printf ' -c: %s\n' ${options['c']};

Scripts recomendados

Criador de Playlist M3U

Script atualizado para conexão ADSL no Slackware

Script que conta quantas barras tem em um diretorio

Gzipar arquivos com determinadas extensões

Script de backup de múltiplos diretórios + LOG


  

Comentários
[1] Comentário enviado por maurixnovatrento em 26/11/2023 - 10:16h

Show.
______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro
Meu GitHub Pessoal: https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts