The Universal Argument Parser (with long options)
Publicado por Fabio Lima (última atualização em 11/11/2023)
[ Hits: 3.828 ]
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.
#!/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']};
Balanceamento e Redundância utilizando 2 Links Speedy (ip fixo)
Automatizando a geração de relatórios do SARG
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Opções secretas em tema do Cinnamon
Como mapear unidade de rede no Linux
Como quebrar senha usando john the ripper
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (1)
Alguém já testou o novo COSMIC Desktop? O que achou? (4)
Não consigo instalar distro antiga no virtualbox nem direto no hd (29)
queria saber como posso alterar a frequencia do meu ryzen 2300u pro (3)









