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

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

Jean César
dark777

(usa Linux Mint)

Enviado em 06/05/2023 - 00:01h

msoliver escreveu:

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
______________________________________________________________________


Seu script é bem mais elaborado sintaticamente em relação a verificar estas opçoes porem,
ao executar algums testes percebi que ele, ainda pega a a opção commit como nome padrão de projeto
Entao se eu executar:

./script -p -c"comentario1" -u"teste"
ou
./script --proj --commit"comentario1" --user="teste"
ou
./script --proj --commit="comentario1" --user="github_usuario"

Olha a saida:
./script -u=teste --proj --commit="comentario1"
User $2:teste
Proj $2:--commit=comentario1

OK

User: 1 [teste]
Proj: 1 [--commitcomentario1]
Comt: 1 ["Comentário Padrão"]
Help: 0
Restos: []
OKAY... Nem sempre . . .



Antes da linha:

(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."


Eu adicionei esta linha:

## Caso não especifique a opção [-c ou --commit] define um comentario padrão para subir o repositório.
if [[ $U -eq 1 && $P -eq 1 && $C -eq 0 ]] ; then
C=1
COMMIT='"Comentário Padrão"'
fi


Eu adicinei estas linha caso o usuário faça:

./script -u=github_usuario -p=projeto1
ou
./script --user=github_user --proj=projeto1

Entao ele não precisaria fazer:
./script -u=github_usuario -p=projeto1 -c ""
ou
./script --user=github_usuario --proj=projeto1 -c " "

Para ativar o comentario padrão pois este comentario se o usuário definir ele ou não a url do github irá criar o repositório remoto com o nome que a variavel da opção [-p | --proj] pejar, mas uma vez que o comentario pdrão foi ativado ele fará o commit subindo o repositório para o github indiferente co nome que esta opção [-p|--proj] pegar como argumento.

Então pelo que eu percebi ainda que façamos isso por causa desta linha:

(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."

ela mostra que P=1 entao ele criaria um repositório com o nome:
-c=comentario1
ou
--commit=comentario1
ou
-ugithubusuario
ou
--user=githubusuario

Este esta sendo o problema que estou tentando entender como resolver através de alguma regex sei la.

Eu tambem tentei fazer algo como:

(($U && $P && !$C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."


Para então definir um comentario padrão após esta linha mas ainda temos o problema de o usuário fazer algo como:

./script --proj --user=usuario1 -c"comentario1"
ou
./script -p -u"usuariogithub"


E na url do github criar repositórios com o nome:

--user=usuario1
ou
-uusuariogithub

Ainda existe

Localmente no SO nao se pode criar uma pasta com esse nome:

-uusuariogithub
ou
--user=usuariogithub


Mas na url do github isso é possivel pois a url que cria os repositórios remotamente só precisa da chave token do usuário github.

A url que cria os repositórios remotamente é esta:

curl -i -H "Authorization: token TOKEN_GITHUB" -d "{\"name\":\"PROJECT_NAME\",\"private\":false}" https://api.github.com/user/repos


No script eu tenho que passar o usuário para verificar qual é a chave token dele pois o script é para gerenciar varios usuários github's diferentes em uma estação de trabalho sendo monousuário ou multiusuário.
wiki.anon


  


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

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/05/2023 - 01:42h

Vejo que o maior problema na programação, é evitar os erros do usuário...
om base nesse teste:
(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."
Se não informar corretamente, mostra a 'ajuda', e sai....

Fiz um novo "help":
echo 'Uso: $0 (-|--)(u|user)[= ]"nome" (-|--)(p|proj)[= ]"nome do projeto" (-|--)(c|comt)[= ]"Descrição do projeto" | (-h|--help)'
----------------------------------------------------------------
./script -p -c"comentario1" -u"teste"
ou
./script --proj --commit"comentario1" --user="teste"
ou
./script --proj --commit="comentario1" --user="github_usuario"

Nesses casos, não encontrei solução....
Conforme postei anteriormente, se NãO informar a opção de um parâmetro,
o getopt, pega o próximo parâmetro como opção.
--------------------------------------------------------------
Outro detalhe observado:
./script --proj=projeto --commit="comentario1" --user"github_usuario"
Acusa erro:
getopt: opção não reconhecida “--projProjeto”
Deve ser usado:
./script --proj=projeto --commit="comentario1" --user="github_usuario"
Ou
./script --proj=projeto --commit="comentario1" --user "github_usuario"
----------------------------------------------------------------------------------------------------------------
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



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

Jean César
dark777

(usa Linux Mint)

Enviado em 06/05/2023 - 12:53h


msoliver escreveu:

Vejo que o maior problema na programação, é evitar os erros do usuário...
om base nesse teste:
(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."
Se não informar corretamente, mostra a 'ajuda', e sai....

Fiz um novo "help":
echo 'Uso: $0 (-|--)(u|user)[= ]"nome" (-|--)(p|proj)[= ]"nome do projeto" (-|--)(c|comt)[= ]"Descrição do projeto" | (-h|--help)'
----------------------------------------------------------------
./script -p -c"comentario1" -u"teste"
ou
./script --proj --commit"comentario1" --user="teste"
ou
./script --proj --commit="comentario1" --user="github_usuario"

Nesses casos, não encontrei solução....
Conforme postei anteriormente, se NãO informar a opção de um parâmetro,
o getopt, pega o próximo parâmetro como opção.
--------------------------------------------------------------
Outro detalhe observado:
./script --proj=projeto --commit="comentario1" --user"github_usuario"
Acusa erro:
getopt: opção não reconhecida “--projProjeto”
Deve ser usado:
./script --proj=projeto --commit="comentario1" --user="github_usuario"
Ou
./script --proj=projeto --commit="comentario1" --user "github_usuario"
----------------------------------------------------------------------------------------------------------------
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Eu tentei solicionar este problema:

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


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"

Ele me deveria retornar as respostas do if abaixo:

if [[ "${PROJECT_NAME}" == "-c" || "${PROJECT_NAME}" == "--commit" || -n $(echo ${PROJECT_NAME} | grep "^-c^*") ]]; 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


wiki.anon


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

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/05/2023 - 00:15h

Boa noite Dark,
Adotei outro método para a solução,
1º checa os parâmetros, caso necessário, arruma, e,
executa o script com os "parâmetros novos".
Testei aqui e funcionou;
Executei sem as opções, gerou tudo ....
./getopt_03_vol.sh --user --proj --comt
______________________________________________________________________
./getopt_03_vol.sh --user=githubusuario --proj=project_name --comt=comment_project
______________________________________________________________________

User: 1 [githubusuario]
Proj: 1 [project_name]
Comt: 1 [comment_project]

--------------------------------------------------------------------------------------------------------------------
Novo script:
#!/usr/bin/env bash
c=0;

uso(){
echo "Uso: $0 \
(-u|--user)[= ]\"usuário\" \
(-p|--proj)[= ]\"nome do projeto\" \
(-c|--comt)[= ]\"comentários\"|\
(-h|--help)";
exit 0;
}
(("$#" < 3)) && uso;
##ARRUMANDO OS ARGS/OPÇÕES
tmp=$(sed -r 's/( [-]+)/\n&/g;' <<< "$@"|sed 's/^[ ]\+//');

while read ln;do
if [[ "$ln" =~ (^[-]{1,2}([cpu]|(comt|proj|user))[= ]{0,2}$) ]];then let c++;
[[ "$ln" =~ (^[-]{1,2}([p]|proj)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--proj=project_name/' <<< "$tmp")
[[ "$ln" =~ (^[-]{1,2}([u]|user)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--user=githubusuario/' <<< "$tmp")
[[ "$ln" =~ (^[-]{1,2}([c]|comt)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--comt=comment_project/' <<< "$tmp")
fi
done<<<"${tmp}";
wait;
tmp=$(paste -sd' ' <<< "$tmp");
wait;
(("$c")) && { printf "$0 ${tmp}\n";sleep 0.0625;$0 ${tmp};exit;}

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


while :;do
case "$1" in
-c|--comt) optc=$2;shift 2;;
-p|--proj) optp=$2;shift 2;;
-u|--user) optu=$2;shift 2;;
-h|--help) shift;uso;;
'--') shift; break ;;
esac
done

echo -e "\nUser: [${optu}]\nProj: [${optp}]\nComt: [${optc}]";

Vários testes e não falhou!!!!

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



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

Jean César
dark777

(usa Linux Mint)

Enviado em 13/05/2023 - 19:13h

msoliver escreveu:

Boa noite Dark,
Adotei outro método para a solução,
1º checa os parâmetros, caso necessário, arruma, e,
executa o script com os "parâmetros novos".
Testei aqui e funcionou;
Executei sem as opções, gerou tudo ....
./getopt_03_vol.sh --user --proj --comt
______________________________________________________________________
./getopt_03_vol.sh --user=githubusuario --proj=project_name --comt=comment_project
______________________________________________________________________

User: 1 [githubusuario]
Proj: 1 [project_name]
Comt: 1 [comment_project]

--------------------------------------------------------------------------------------------------------------------
Novo script:
#!/usr/bin/env bash
c=0;

uso(){
echo "Uso: $0 \
(-u|--user)[= ]\"usuário\" \
(-p|--proj)[= ]\"nome do projeto\" \
(-c|--comt)[= ]\"comentários\"|\
(-h|--help)";
exit 0;
}
(("$#" < 3)) && uso;
##ARRUMANDO OS ARGS/OPÇÕES
tmp=$(sed -r 's/( [-]+)/\n&/g;' <<< "$@"|sed 's/^[ ]\+//');

while read ln;do
if [[ "$ln" =~ (^[-]{1,2}([cpu]|(comt|proj|user))[= ]{0,2}$) ]];then let c++;
[[ "$ln" =~ (^[-]{1,2}([p]|proj)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--proj=project_name/' <<< "$tmp")
[[ "$ln" =~ (^[-]{1,2}([u]|user)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--user=githubusuario/' <<< "$tmp")
[[ "$ln" =~ (^[-]{1,2}([c]|comt)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--comt=comment_project/' <<< "$tmp")
fi
done<<<"${tmp}";
wait;
tmp=$(paste -sd' ' <<< "$tmp");
wait;
(("$c")) && { printf "$0 ${tmp}\n";sleep 0.0625;$0 ${tmp};exit;}

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


while :;do
case "$1" in
-c|--comt) optc=$2;shift 2;;
-p|--proj) optp=$2;shift 2;;
-u|--user) optu=$2;shift 2;;
-h|--help) shift;uso;;
'--') shift; break ;;
esac
done

echo -e "\nUser: [${optu}]\nProj: [${optp}]\nComt: [${optc}]";

Vários testes e não falhou!!!!

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



Eu fiz o teste deste codigo aqui e neste caso:

./teste_args_vol -u="usuario1" -p="projeto1" -c="comment projeto1"

./teste_args_vol -u="usuario1" -p="projeto1" --c="comment projeto1"

./teste_args_vol -u="usuario1" -p="projeto1" --comt="comment projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" -p "projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" -p="projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" --p="projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" --proj="projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" -u "usergit1"

./teste_args_vol -c="comment projeto1" -p="projeto1" -u="usergit1"

./teste_args_vol --c="comment projeto1" --p="projeto1" --u="usergit1"

./teste_args_vol --c="comment projeto1" --p="projeto1" --user="usergit1"

./teste_args_vol --comt="comment projeto1" --proj="projeto1" --user="usergit1"

Ele nao funcionou fica travado nao entendi por que.

Se eu fizer assim ele nao fica travado:
./teste_args_vol --u="usergit1" -p="projeto1" -c"comentario1"
./teste_args_vol --u="usergit1" -p="projeto1" -c "comentario1"
./teste_args_vol -c"comment projeto1" -p="projeto1" -u="usergit1"
./teste_args_vol -c "comment projeto1" -p="projeto1" -u="usergit1"

User: [usergit1]
Proj: [projeto1]
Comt: [comentario1]



Você poderia me explicar por que este espaço em branco após [= ]

(^[-]{1,2}([cpu]|(comt|proj|user))[= ]{0,2}$)


Eu encontrei esta opção do operador binário "=~" em uma sugestão em outro forum onde postei a
dúvida sobre regex e estava checando opção por opção:

if [[ "${USER_GIT}" =~ -p.* || "${USER_GIT}" =~ --p.* || "${USER_GIT}" =~ --proj.* ]]; then
echo -e "\n\e[1;35mFalta\033[1;32m:"
echo -e "\033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m\n"
fi

Alterei para seu exemplo de expressão regex:
if [[ "${USER_GIT}" =~ (^[-]{1,2}([p]|proj)[= ]{0,2}$) ]]; then
echo -e "\n\e[1;35mFalta\033[1;32m:"
echo -e "\033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m\n"
fi

Estou fazendo algums testes das posições dos argumentos pra ver se quais erros podem acontecer


Encontrei algo sobre verificar as variáveis vazias em:

https://shell-script.yahoogrupos.com.narkive.com/IsvcgN4d/duvida-com-filtros-grep-x-espacos-em-branc...

echo ${USER_GIT} | grep -E "^{1,}"

if [[ -z "$(echo ${USER_GIT} | grep -E "^{1,}")" && -z "$(echo ${PROJECT_NAME} | grep -E "^{1,}")" ]]; then

## gitpratico -c="comentario"
echo -e "\n\e[1;36mFalta\033[1;32m:"
echo -e "\033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m\n"
fi



Você poderia comentar o seu código de forma melhor pra eu entnder?
Atualmente meu código esta assim estou estudando como melhorar ele um pouco mais:

#!/usr/bin/env bash

function help() {

echo -e "\n\e[1;34mO script \e[1;32m${0##*/}\033[1;34m deve ser executado dentro da pasta \ndo projeto somente uma única vez.\033[0m"

echo -e "\n\e[1;31mUsage\e[1;34m: \e[1;32m${0##*/} \033[1;34m-u\033[1;32m=\033[1;35m\"your_user_github\" \033[1;34m-p\033[1;32m=\033[1;35m\"project_name\" \033[1;34m-c\033[1;32m=\033[1;35m\"comentário\"\033[0m"

echo -e "\n\e[1;31mOptions\e[1;32m:\n\e[1;34m(-u | --u | --user)\033[1;32m=\033[1;35m\"your_user_github\"\033[1;34m Usuário github\n\n(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[1;34m Nome do projeto a subir no github como repositório\n\n(-c | --c | --commit)\033[1;32m=\033[1;35m\"comment repository/project\"\033[1;34m Comentar criação repositório/projeto\033[0m\n"

exit 0
}

## Os : obriga a digitar um argumento após a opção.
OPTS=$(getopt -a -n ${0} -o u:,p:,c:,h --long user:,proj:,commit:,help -- "$@")

eval set -- "${OPTS}"

while :; do

case "${1}" in

-u | --u | --user)

USER_GIT=${2}

## Para pegar o segundo argumento.
shift 2

;;

-p | --p | --proj)

PROJECT_NAME=${2}

## Para pegar o segundo argumento.
shift 2

;;

-c | --c | --commit)

COMMIT=${2}

## Para pegar o segundo argumento.
shift 2

;;

-h | --help)

## Para não dar loop infinito.
shift
#help
;;

--) # Skip --
## Para não dar loop infinito.
shift
break
;;
esac
done

## Operador '=~' binário para verificar expressão regex.
if [[ "${USER_GIT}" =~ (^[-]{1,2}([p]|proj)[= ]{0,2}$) ]]; then
#if [[ "${USER_GIT}" =~ ^-p.* || "${USER_GIT}" =~ ^--p.* || "${USER_GIT}" =~ ^--proj.* ]]; then

## gitpratico -u"" -p"" -c "comentario"
##
## gitpratico -u -p -c "criação projeto"
##
## gitpratico --u --p -c "criação projeto"
##
## gitpratico -u --p="projeto1" -c "criação projeto"
##
## gitpratico --user --proj --commit "criação projeto"
##
## gitpratico --user --proj "projeto1" --commit "criação projeto"

echo -e "\n\e[1;35mFalta\033[1;32m:"
echo -e "\033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m\n"
#help

elif [[ "${USER_GIT}" =~ (^[-]{1,2}([c]|commit)[= ]{0,2}$) ]]; then
#elif [[ "${USER_GIT}" =~ ^-c.* || "${USER_GIT}" =~ ^--c.* || "${USER_GIT}" =~ ^--commit.* ]]; then

## Se pegar [-c | --c | --commit] como opção de nome de usuário
##
## gitpratico -u -c -p "projeto1"
##
## gitpratico -u"" -c"" -p "projeto1"
##
## gitpratico -u="" -c="" -p "projeto1"
##
## gitpratico --u="" --c="" --p="projeto1"
##
## gitpratico -u -c"comentario" -p "projeto1"
##
## gitpratico --u --c="comentario" --p "projeto1"
##
## gitpratico -u -c "criação projeto" -p "projeto1"
##
## gitpratico --user --commit --proj "projeto1"
##
## gitpratico --user --commit "criação projeto" --proj "projeto1"

echo -e "\n\e[1;35mFalta1\033[1;32m:"
echo -e "\033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m"
echo -e "\033[1;31m(-c | --c | --commit)\033[1;32m=\033[1;35m\"comment create project\"\033[0m\n"
#help

elif [[ "${PROJECT_NAME}" =~ (^[-]{1,2}([u]|user)[= ]{0,2}$) ]]; then
#elif [[ "${PROJECT_NAME}" =~ ^-u.* || "${PROJECT_NAME}" =~ ^--u.* || "${PROJECT_NAME}" =~ ^--user.* ]]; then

## Se opção [-p="" | --p="" | --proj=""] ou [-u="" | --u="" | --user=""] for vazia.
##
##
## Se pegar [-u | --u | --user] como opção de projeto
##
## gitpratico -p"" -u"" -c "comentário projeto1"
##
## gitpratico -p -u -c "criação projeto"
##
## gitpratico --p --u --c="criação projeto"
##
## gitpratico -p -u"github_usuario1"
##
## gitpratico -p -u "github_usuario1"
##
## gitpratico -p -u="github_usuario1"
##
## gitpratico --proj --user"github_usuario1"
##
## gitpratico --proj --user="github_usuario1"

echo -e "\n\e[1;35mFalta2\033[1;32m:"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m"
echo -e "\033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m\n"
#help

elif [[ "${PROJECT_NAME}" =~ (^[-]{1,2}([c]|commit)[= ]{0,2}$) ]]; then
#elif [[ "${PROJECT_NAME}" =~ ^-c.* || "${PROJECT_NAME}" =~ ^--c.* || "${PROJECT_NAME}" =~ ^--commit.* ]]; then

## Se pegar a opção [-c | --c | --commit] como opção de projeto
##
## gitpratico -u"user1" -p -c
##
## gitpratico -u"user1" -p -c"comentario projeto1"
##
## gitpratico -u "user1" -p -c"comentario projeto1"
##
## gitpratico -u="user1" -p -c="comentario projeto1"
##
## gitpratico -u"user1" -p"" -c"comentario projeto1"
##
## gitpratico --user="user1" --proj --commit
##
## gitpratico -u "user1" -p --commit"comentario projeto1"
##
## gitpratico -u="user1" -p --commit="comentario projeto1"
##
## gitpratico --user="user1" --proj -c"comentario projeto1"
##
## gitpratico --user="user1" --proj -c="comentario projeto1"
##
## gitpratico --user="user1" --proj --commit"comentario projeto1"
##
## gitpratico --user="user1" --proj --commit="comentario projeto1"

echo -e "\n\e[1;35mFalta\033[1;32m:"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m"
echo -e "\033[1;31m(-c | --c | --commit)\033[1;32m=\033[1;35m\"comment create project\"\033[0m\n"
#help

elif [[ "${COMMIT}" =~ (^[-]{1,2}([p]|proj)[= ]{0,2}$) ]]; then
#elif [[ "${COMMIT}" =~ ^-p.* || "${COMMIT}" =~ ^--p.* || "${COMMIT}" =~ ^--proj.* ]]; then

## Se pegar a opção [-p | --p | --proj] como opção de commit
##
## gitpratico -c -p
##
## gitpratico --c --p
##
## gitpratico -c -p -u "user_github"
##
## gitpratico -c -p "projeto1" -u "user_github"
##
## gitpratico --commit --proj --user="usergithub"

echo -e "\n\e[1;35mFalta\033[1;32m:"
echo -e "\033[1;31m(-c | --c | --commit)\033[1;32m=\033[1;35m\"comment create project\"\033[0m"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m\n"
#help

elif [[ "${COMMIT}" =~ (^[-]{1,2}([u]|user)[= ]{0,2}$) ]]; then
#elif [[ "${COMMIT}" =~ ^-u.* || "${COMMIT}" =~ ^--u.* || "${COMMIT}" =~ ^--user.* ]]; then

## Se pegar a opção [-u | --u | --user] como opção de commit
##
## gitpratico -c -u -p "projeto1"
##
## gitpratico --c --u -p "projeto1"
##
## gitpratico -c -u "user_github" -p "projeto1"
##
## gitpratico --c --u="user_github" --p="projeto1"
##
## gitpratico --commit --user --proj "projeto1"
##
## gitpratico --commit --user "user_github" --proj "projeto1"

echo -e "\n\e[1;36mFalta\033[1;32m:"
echo -e "\033[1;31m(-u | --u | -user | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m"
echo -e "\033[1;31m(-c | --c | -commit | --commit)\033[1;32m=\033[1;35m\"comment create project\"\033[0m\n"
#help

## Comando grep para filtrar opções vazias ou a falta delas
elif [[ -z "$(echo ${USER_GIT} | grep -E "^{1,}")" && -z "$(echo ${PROJECT_NAME} | grep -E "^{1,}")" ]]; then

## gitpratico -c="comentario"
##
## gitpratico -u="" -p="" -c "comentario projeto1"
##
## gitpratico -p="" -u="" -c "comentário projeto1"
##
## gitpratico --p="" --u="" --c="comentário projeto1"
##
## gitpratico --proj="" --user="" -c "comentário projeto1"
##
## gitpratico -p" " -u" " -c "comentário projeto1"
##
## gitpratico -p="" -u=" " -c "comentário projeto1"
##
## gitpratico --p=" " --u=" " --c "comentário projeto1"
##
## gitpratico --p" " --u" " --c "comentário projeto1"
##
## gitpratico --proj="" --user="" --commit "comentário projeto1"
##
## gitpratico --proj=" " --user=" " --commit="comentário projeto1"

echo -e "\n\e[1;36mFalta\033[1;32m:"
echo -e "\033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m\n"
#help

elif [[ -z "$(echo ${PROJECT_NAME} | grep -E "^{1,}")" && -z "$(echo ${COMMIT} | grep -E "^{1,}")" ]]; then

## gitpratico -u="your_user_github"
##
## gitpratico -p="" -c="" -u="user1"
##
## gitpratico --p="" --c="" --u="user1"
##
## gitpratico --u="user1" --p="" --c=""
##
## gitpratico --user="user1" --proj="" --commit=""

echo -e "\n\e[1;36mFalta\033[1;32m:"
echo -e "\033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m"
echo -e "\033[1;31m(-c | --c | --commit)\033[1;32m=\033[1;35m\"comment create project\"\033[0m\n"
#help

elif [[ -z "$(echo ${USER_GIT} | grep -E "^{1,}")" ]]; then

## gitpratico -p"projeto1" -c"comentario"
##
## gitpratico -p "projeto1" -c "comentário projeto1" -u=""
##
## gitpratico -p "projeto1" -c "comentário projeto1" -u" "
#
## gitpratico -p "projeto1" -c "comentário projeto1" --u=" "
##
## gitpratico -p "projeto1" -c "comentário projeto1" --u " "
##
## gitpratico -u="" --c "comentário projeto1" -p="projeto1"
##
## gitpratico --u=" " --c "comentário projeto1" --p="projeto1"
##
## gitpratico --user="" --commit="comentário projeto1" --proj="projeto1"

echo -e "\n\e[1;35mFalta\033[1;32m: \033[1;31m(-u | --u | --user)\033[1;32m=\033[1;35m\"user_github\"\033[0m\n"
#help

elif [[ -z "$(echo ${PROJECT_NAME} | grep -E "^{1,}")" ]]; then

## gitpratico --c "comentário projeto1" --u="usuario1"
##
## gitpratico --p="" --c "comentário projeto1" --u="usuario1"
##
## gitpratico --p=" " --c "comentário projeto1" --u="usuario1"
##
## gitpratico --proj="" --commit="comentário projeto1" --user="usuario1"
##
## gitpratico -c "comentário projeto1" -u "usuario1" -p=""
##
## gitpratico -c "comentário projeto1" -u "usuario1" -p ""
##
## gitpratico -c "comentário projeto1" -u "usuario1" -p" "
##
## gitpratico --c "comentário projeto1" --u="usuario1" --p=""
##
## gitpratico --c "comentário projeto1" --u="usuario1" --p=" "
##
## gitpratico --commit="comentário projeto1" --user="usuario1" --proj=""

echo -e "\n\e[1;35mFalta\033[1;32m: \033[1;31m(-p | --p | --proj)\033[1;32m=\033[1;35m\"project_name\"\033[0m\n"
#help

elif [[ -n "${USER_GIT}" && -n "${PROJECT_NAME}" && -z "$(echo ${COMMIT} | grep -E "^{1,}")" ]]; then

## gitpratico -u="usuario1" -p="projeto1"
##
## gitpratico --u="usuario1" --p="projeto1"
##
## gitpratico --user="usuario1" --proj="projeto1"
##
## gitpratico -c="" -u="usuario1" -p="projeto1"
##
## gitpratico --c="" --u="usuario1" --p="projeto1"
##
## gitpratico --commit="" --user="usuario1" --proj="projeto1"
##
## gitpratico -u="usuario1" -p="projeto1" -c=""
##
## gitpratico -u="usuario1" -p="projeto1" -c ""
##
## gitpratico -u="usuario1" -p="projeto1" -c" "
##
## gitpratico --u="usuario1" --p="projeto1" --c=""
##
## gitpratico --user="usuario1" --proj="projeto1" --commit=""

echo -e "\n\e[1;35mFalta\033[1;32m: \033[1;31m(-c | --c | --commit)\033[1;32m=\033[1;35m\"comment create project\"\033[0m\n"

## Só define um commit padrão se o [-u | --u | --user] e [-p | --p | --proj]
## não for nulo após todos os testes acima.
## E a opção [-c | --c | --commit] não for passada ou estiver vazia.
COMMIT="Repository ${PROJECT_NAME} created by ${USER_GIT}"
#help
fi

if [[ -n "${USER_GIT}" && -n "${PROJECT_NAME}" && -n "${COMMIT}" ]]; then

echo -e "\nUser: [${USER_GIT}]\nProj: [${PROJECT_NAME}]\nCommit: [${COMMIT}]\n\n"

fi




wiki.anon


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

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/05/2023 - 19:47h

Antes de mais nada....
Qual o "$SHELL" que está usando?
echo $SHELL

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



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

Jean César
dark777

(usa Linux Mint)

Enviado em 13/05/2023 - 21:16h


msoliver escreveu:

Antes de mais nada....
Qual o "$SHELL" que está usando?
echo $SHELL

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


$ echo $SHELL
/bin/bash

wiki.anon


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

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/05/2023 - 00:38h

dark777 escreveu:


msoliver escreveu:

Antes de mais nada....
Qual o "$SHELL" que está usando?
echo $SHELL

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


$ echo $SHELL
/bin/bash
wiki.anon

Dark, esta muito estranho....
Dos testes que vc fez e travou:
./teste_args_vol -u="usuario1" -p="projeto1" -c="comment projeto1"

./teste_args_vol -u="usuario1" -p="projeto1" --c="comment projeto1"

./teste_args_vol -u="usuario1" -p="projeto1" --comt="comment projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" -p "projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" -p="projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" --p="projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" --proj="projeto1"

./teste_args_vol -u="usuario1" -c="comment projeto1" -u "usergit1"

./teste_args_vol -c="comment projeto1" -p="projeto1" -u="usergit1"

./teste_args_vol --c="comment projeto1" --p="projeto1" --u="usergit1"

./teste_args_vol --c="comment projeto1" --p="projeto1" --user="usergit1"

./teste_args_vol --comt="comment projeto1" --proj="projeto1" --user="usergit1"

Rodei todos aqui e funcionou....
-------------------------------------------------
Note que separo cada arg em uma linha:
tmp=$(sed -r 's/( [-]+)/\n&/g;' <<< "$@"|sed 's/^[ ]\+//');
Você poderia me explicar por que este espaço em branco após [= ]
(^[-]{1,2}([cpu]|(comt|proj|user))[= ]{0,2}$)
O espaço, é para 'casar' se foi 'passado':
Ex:
--user= $
--user=$
--user$
etc....
$ é o fim de linha
-------------------------------------------------------------

Eu encontrei esta opção do operador binário "=~" em uma sugestão em outro forum . . . .
É o que fiz ....
while read ln;do
if [[ "$ln" =~ (^[-]{1,2}([cpu]|(comt|proj|user))[=]?[ ]?$) ]];then let c++;
[[ "$ln" =~ (^[-]{1,2}([p]|proj)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--proj=project_name/' <<< "$tmp")
[[ "$ln" =~ (^[-]{1,2}([u]|user)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--user=githubusuario/' <<< "$tmp")
[[ "$ln" =~ (^[-]{1,2}([c]|comt)[= ]{0,2}$) ]] && tmp=$(sed 's/'${ln}'/--comt=comment_project/' <<< "$tmp")
fi
done<<<"${tmp}";
---------------------------------------------------------------------------------------------------------------
Encontrei algo sobre verificar as variáveis vazias em:.....
De nada resolve "testar" depois do getopt,
por isso mudei a lógica,
testo, se tem erro ,
se tem erro, arrumo
com tudo arrumado, executo ....
______________________________________________________________________
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