Verificando o argumento após a opçao passada ao script [RESOLVIDO]

13. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 03/05/2023 - 22:00h


alexabolada escreveu:

Olá, wiki.anon! Entendi suas preocupações e percebo que o script ainda precisa de ajustes. Vou sugerir uma modificação no script incluindo uma verificação das variáveis após o loop `while getopts`.

[code]
#!/bin/bash

# Função para mostrar ajuda quando necessário
help() {
echo "Uso: $0 -u USUÁRIO_GIT -p NOME_DO_PROJETO -c COMMIT"
exit 1
}

while getopts ":u:p:c:h" opt; do
case $opt in
u)
USER_GIT="$OPTARG"
;;
p)
PROJECT_NAME="$OPTARG"
;;
c)
COMMIT="$OPTARG"
;;
h)
help
;;
\\?)
echo "Opção inválida: -$OPTARG" >&2
exit 1
;;
:)
echo "A opção -$OPTARG requer um argumento." >&2
exit 1
;;
esac
done

# Verificar se os argumentos obrigatórios foram passados
if [[ -z $USER_GIT ]] || [[ -z $PROJECT_NAME ]] || [[ -z $COMMIT ]]; then
echo "Argumentos obrigatórios ausentes!"
help
fi

echo "Usuário Git: $USER_GIT"
echo "Nome do Projeto: $PROJECT_NAME"
echo "


@alexabolada eu refiz os testes pegando o OPTARG mas ao digitar:

./script -p -u"github_usuario" -c "comentario1"

ele deveria me mostrar:
Falta: [-p | --proj "<project_name>"]
Falta: [-u | --user "<user_github>"]

ele me mostra:

Falta: [-u | --user "<user_github>"]

como eu faço para verificar isso?
wiki.anon


  


14. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 22:06h

{"error":{"code":502,"message":"Bad gateway.","param":null,"type":"cf_bad_gateway"}}


15. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 03/05/2023 - 22:41h


alexabolada escreveu:

{"error":{"code":502,"message":"Bad gateway.","param":null,"type":"cf_bad_gateway"}}


Se eu executar:

./script -p -c"comentario" -u"githubuser"
./script -p -c"comentario" -u "githubuser"

Verifiquei que o problema de criar repositório com o nome:

-ccomentario

ainda existe



wiki.anon


16. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 22:41h

Olá! Pelo que entendi, você está tentando executar um script que cria repositórios no GitHub com um comentário incluído, mas o problema ocorre quando o nome do repositório contém o texto "-ccomentario".

A sintaxe correta para o comando é:


./script -p -c "comentario" -u "githubuser"


Se o problema persistir, pode ser um problema com o próprio script. Nesse caso, será necessário analisar o trecho de código onde o nome do repositório é criado e verificar se há algo errado com a maneira como os argumentos são tratados.

Você pode compartilhar o trecho de código em questão? Assim, poderei verificar se há algum erro aparente na lógica do script. Lembre-se de inserir o código usando as tags
 e  
.


17. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 03/05/2023 - 23:48h


alexabolada escreveu:

Olá! Pelo que entendi, você está tentando executar um script que cria repositórios no GitHub com um comentário incluído, mas o problema ocorre quando o nome do repositório contém o texto "-ccomentario".

A sintaxe correta para o comando é:


./script -p -c "comentario" -u "githubuser"


Se o problema persistir, pode ser um problema com o próprio script. Nesse caso, será necessário analisar o trecho de código onde o nome do repositório é criado e verificar se há algo errado com a maneira como os argumentos são tratados.

Você pode compartilhar o trecho de código em questão? Assim, poderei verificar se há algum erro aparente na lógica do script. Lembre-se de inserir o código usando as tags
 e  
.


@alexabolada eu sei que a sintaxe correta é esta:

./script -p -c "comentario" -u "githubuser"


Mas o usuário também pode digitar:

./script -p -c"comentario" -u "githubuser"

é ai que esta o problema maior.



wiki.anon


18. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 23:49h

Olá, wiki.anon!

Entendo o problema que você mencionou. Nesse caso, é necessário ajustar o script para lidar com a ausência do espaço entre a opção "-c" e o início da string do comentário.

Para fazer isso, você pode usar uma expressão regular no script para identificar e capturar corretamente o texto do comentário, mesmo que não haja um espaço entre a opção "-c" e o início do comentário.

Aqui está um exemplo de como você pode fazer isso com a linguagem Python:


import re
import sys

comentario = None
args = ' '.join(sys.argv[1:])

match = re.search('-c\s*(".*?")', args)

if match:
comentario = match.group(1)

print(f'Comentário encontrado: {comentario}')


O trecho acima utiliza a biblioteca re (expressões regulares) para buscar a opção "-c" seguida de zero ou mais espaços e capturar o conteúdo entre aspas duplas. Assim, consegue-se obter corretamente o comentário, mesmo se não houver espaço entre a opção e o texto.

Espero que isso ajude a solucionar o problema no seu script! Se precisar de mais ajuda ou se quiser compartilhar o trecho de


19. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/05/2023 - 01:17h

O erro esta na atribuição da variável:
OPTS=$(getopt -o u:,p:,c:,h --long user:,proj:,commit:,help -n ${0} -- "$@")


______________________________________________________________________

Att.: Marcelo Oliver
______________________________________________________________________



20. Re: Verificando o argumento após a opçao passada ao script

Jean César
dark777

(usa Linux Mint)

Enviado em 04/05/2023 - 13:29h

msoliver escreveu:

O erro esta na atribuição da variável:
OPTS=$(getopt -o u:,p:,c:,h --long user:,proj:,commit:,help -n ${0} -- "$@")


______________________________________________________________________

Att.: Marcelo Oliver
______________________________________________________________________


Eu vou ter que mudar a posição das variáveis?

Mas e se o usuário digitar algo como:

./script -c" " -p"" como eu vço para verificar espaços em branco quando as opçoes forem usadas com as apas duplas assim:

-c" "
--commit" "
-p" "
--proj" "
-u" "
--user" "
?


Pq de acododo com algums testes que su fiz se eu fizer:

./script -u"githubuser" -p " "

Ele pega o diretório $USER e inicializa o repositório ali fazendo subindo a pasta do usuário como repositório.

E na url que cria o repositório ele cria um repositório com o nome de um traço "-"

Estou tentando tratar estes erros e problemas indiferente da posição em que o usuário use os argumentos e verificar o que foi passado a estes argumentos,
se foi algo como -p " " ou -p"" -proj"projeto1" ou -u"githubuser" ou -u " " ou -u""


Eu mudei as posiçoes deixando assim:

OPTS=$(getopt -o u:,c:,p:,h --long user:,commit:,proj:,help -n ${0} -- "$@")

e ao digitar:

./script --user "githubuser" --proj -c"comentario1"

ele esta criando um repositório na url com o nome "-ccomentario1"


wiki.anon


21. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/05/2023 - 20:12h

Eu vou ter que mudar a posição das variáveis?
O problema não é a posição das vars,
com base nos testes/pesquisas, é a sintaxe do getopt.....
Gostei do 'getopt', sempre usei o getopts.....

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



22. Re: Verificando o argumento após a opçao passada ao script [RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 04/05/2023 - 21:03h


msoliver escreveu:

Eu vou ter que mudar a posição das variáveis?
O problema não é a posição das vars,
com base nos testes/pesquisas, é a sintaxe do getopt.....
Gostei do 'getopt', sempre usei o getopts.....

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Sim mas como eu faço pra verificar o que foi pasado como argumento para nao criar repositórios com os nomes das opçoes indiferente da forma como o usuario usa-las e da posição delas?


./script -p -u" "
./script -p -c" "

./script -u"githubusuario" -p " "

./script -u"githubusuario" -p -c " "

Ja pesquisei na internet algum tipo de regex pra verificar isso mas nao encontrei nada.


wiki.anon


23. Re: Verificando o argumento após a opçao passada ao script

Jean César
dark777

(usa Linux Mint)

Enviado em 05/05/2023 - 18:25h

dark777 escreveu:


msoliver escreveu:

Eu vou ter que mudar a posição das variáveis?
O problema não é a posição das vars,
com base nos testes/pesquisas, é a sintaxe do getopt.....
Gostei do 'getopt', sempre usei o getopts.....

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Sim mas como eu faço pra verificar o que foi pasado como argumento para nao criar repositórios com os nomes das opçoes indiferente da forma como o usuario usa-las e da posição delas?


./script -p -u" "
./script -p -c" "

./script -u"githubusuario" -p " "

./script -u"githubusuario" -p -c " "

Ja pesquisei na internet algum tipo de regex pra verificar isso mas nao encontrei nada.


wiki.anon



Estou fazendo o teste:

./script -u "githubusuario" -p -c"comentario1"

ele me deveria retornar as respostas do if abaixo:
if [[ "${PROJECT_NAME}" == "-c" || "${PROJECT_NAME}" == "--commit" ]]; then
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-c | --commit \"comment create project\"]\033[0m\n"
help
fi

mas ele esta criando repositórios com o nome "-ccomentario1" como faço um regex pra verificar isso?

Tentei fazer algo como:
PROJECT_NAME="-ccomentario1"

echo ${PROJECT_NAME} | grep "^-c^*"
-ccomentario1

mas ao executar no script ele diz que há um erro em "^" e ainda assim cria o repositório com o nome "-ccomentario1"

wiki.anon


24. Re: Verificando o argumento após a opçao passada ao script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/05/2023 - 21:57h

dark777 escreveu:

msoliver escreveu:

O erro esta na atribuição da variável:
OPTS=$(getopt -o u:,p:,c:,h --long user:,proj:,commit:,help -n ${0} -- "$@")


______________________________________________________________________

Att.: Marcelo Oliver
______________________________________________________________________


Eu vou ter que mudar a posição das variáveis?

Mas e se o usuário digitar algo como:

./script -c" " -p"" como eu vço para verificar espaços em branco quando as opçoes forem usadas com as apas duplas assim:

-c" "
--commit" "
-p" "
--proj" "
-u" "
--user" "
?


Pq de acododo com algums testes que su fiz se eu fizer:

./script -u"githubuser" -p " "

Ele pega o diretório $USER e inicializa o repositório ali fazendo subindo a pasta do usuário como repositório.

E na url que cria o repositório ele cria um repositório com o nome de um traço "-"

Estou tentando tratar estes erros e problemas indiferente da posição em que o usuário use os argumentos e verificar o que foi passado a estes argumentos,
se foi algo como -p " " ou -p"" -proj"projeto1" ou -u"githubuser" ou -u " " ou -u""


Eu mudei as posiçoes deixando assim:

OPTS=$(getopt -o u:,c:,p:,h --long user:,commit:,proj:,help -n ${0} -- "$@")

e ao digitar:

./script --user "githubuser" --proj -c"comentario1"

ele esta criando um repositório na url com o nome "-ccomentario1"


wiki.anon

Boa noite Dark.
A "Coisa" é complicada.....
Se passar dessa forma, dá erro!
./script --user "githubuser" --proj -c"comentario1"
Pega (-c"comentario1"), como opção de "proj"
---------------------------------------------------------
./script --user "githubuser" --proj="" -c"comentario1"
Ou
./script --user "githubuser" --proj=" " -c"comentario1"

Preenche a opção de proj com "Projeto Padrão"
Faz o mesmo com o comentário: "Comentário Padrão".
---------------------------------------------------------------------------------------------------------------
Se Não colocar o "user", ou, user="", user=" " (vazio|espaço)
Mostra ajuda e sai.
---------------------------------------------------------------------------------------------------------------
(($U && $P && $C)) && echo Ok
Foram fornecidos argumentos e opções.
---------------------------------------------------------------------------------------------------------------
Se tem "Restos", foi passada uma opção com "espaços sem aspas"
---------------------------------------------------------------------------------------------------------------
Verifique se atende as necessidades.....
Caso positivo, não esqueça de marcar como resolvido e escolher a Melhor Resposta . . .
Rsrsrsrsrsrs
---------------------------------------------------------------------------------------------------------------

#!/usr/bin/env bash
U=0; P=0; C=0;

uso(){
echo -e "Uso: ${s0[2]} (-u|--user) \"usuário\" (-p|--proj) \"nome do projeto\" (-c|--comt) \"aqui os comentários\" | (-h|--help)\n"
exit 0;
}

parsed=$(getopt -a -n "getopt" -o u:p:c:h --long user:,comt:,proj:,help -- "$@");
eval set -- "$parsed";

while :;do
case "$1" in
-c|--comt) C=1;
case "$2" in
""|" ") optc='"Comentário Padrão"';shift 2;;
*) optc=$2;shift 2 ;;
esac ;;
-p|--proj) P=1;
case "$2" in
""|" ") optp='"Projeto Padrão"';shift 2 ;;
*) optp=$2;shift 2 ;;
esac ;;
-u|--user) U=1;
case "$2" in
""|" ") echo "Erro , sem user";uso;;
*) optu=$2;shift 2 ;;
esac ;;
-h|--help) shift;uso;;
--) shift; break ;;
esac
done
## Eficiente
(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."
echo -e "
User: $U [${optu}]
Proj: $P [${optp}]
Comt: $C [${optc}]
Help: $H
Restos: [${@}]";
#Se tem resto, tem algo errado . . .#
[ -z "${@}" ] 2>/dev/null && echo 'OKAY... Nem sempre . . .' || echo 'ERRO'

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________




01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts