The Universal Argument Parser (with long options)
Publicado por Fabio Lima (última atualização em 11/11/2023)
[ Hits: 3.875 ]
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']};
Script de instalação para Firefox e Thunderbird - new release
Ver TV e rádio online por shell script
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
O que houve com slackware ??? (12)
Alterar conteúdo de dica [RESOLVIDO] (3)
Vou destruir sua infância:) (5)









