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

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

César
dark777

(usa Debian)

Enviado em 03/05/2023 - 18:10h


Ola galera beleza?

Eu tenho um script para criar repositório remoto no github e ao executar:

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

Ele esta criando repositório com os nomes:

-ccomentario
e
--commitcomentario


Se eu executar o seguinte comando:

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

Ele esta criando repositório com os nomes:

-ugithubuser
e
--usergithubuser


Se eu passar o seguinte comando:

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

Neste comando acima tem um espaço dentro das aspas duplas e um espaço entre a opção -p e as aspas:

Meu script deveria mostrar que falta [ -p | --proj ]

Mas ele esta pegando pasta do usuário $USER do sistema e e inicializando ela como repositório


Se eu executar:

./script -p -u" "

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

note que as aspas duplas estão coladas na opção -u e tem um espaço em branco dentro das aspas duplas


como posso resolver estes problemas de argumentos vazios e criação de repositórios?

A minha estrutura de comparação estão da seguinte forma abaixo:

#!/usr/bin/bash

function help() {
echo -e "\n\e[1;34mO script \e[1;31m${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;35m-u \"<usuario_git>\" -p \"<project_name>\" -c \"comentário sobre projeto\"\033[0m"
echo -e "\n\e[1;31mOptions\e[1;32m:\n\e[1;34m[-u | --user: Opção para usuário github]\n\n[-p | --proj: Opção para nome do projeto a subir no github]\n\n[-c | --commit: Opção para comentar o criação do projeto]\033[0m\n\n"

exit 1
}

ACESS_TOKEN="MY_TOKEN_GITHUB"

# Processa os argumentos usando getopt
# Os ":" após as opções força a digitar um argumento
OPTS=$(getopt -o u:,p:,c:,h --long user:,proj:,commit:,help -n ${0} -- "$@") || exit

# Atribui os argumentos às variáveis
eval set -- "${OPTS}"

if [ $# -lt 3 ]; then
help
else
while :; do
case "${1}" in

-u | --user)
USER_GIT="${2}"

## Pegar o argumento 2 após a opção
shift 2
;;

-p | --proj)
PROJECT_NAME="${2}"

## Pegar o argumento 2 após a opção
shift 2
;;

-c | --commit)
COMMIT="${2}"

## Pega o argumento 2 após a opção
shift 2
;;

-h | --help)
help

# Para não dar loop infinito ao usar -h | --help
shift
;;

--)
# Skip --
shift
break
;;
*)
echo -e "\e[1;31mOpção inválida\033[1;32m: \033[1;31m${1}\033[0m"
exit 1
;;
esac

done


## 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"
if [[ "${USER_GIT}" == "-p" || "${USER_GIT}" == "--proj" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help


## gitpratico -u -c -p "projeto1"
## gitpratico -u -c "criação projeto" -p "projeto1"
## gitpratico --user --commit --proj "projeto1"
## gitpratico --user --commit "criação projeto" --proj "projeto1"
elif [[ "${USER_GIT}" == "-c" || "${USER_GIT}" == "--commit" ]]; then

echo -e "\e[1;31mFalta\033[1;32m]: \033[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-c | --commit \"coment create project\"]\033[0m\n"
help


## gitpratico -p -u -c "criação projeto"
## gitpratico -p -u "user_github" -c "criação projeto"
## gitpratico --proj --user -commit "criação projeto"
## gitpratico --proj --user "user_github" --commit "criação projeto"
elif [[ "${PROJECT_NAME}" == "-u" || "${PROJECT_NAME}" == "--user" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\[0m]"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-u | --user \"<user_github>\"]\033[0m\n"
help


## gitpratico -p -c -u "user_github"
## gitpratico -p -c "criação projeto" -u "user_github"
## gitpratico --proj --commit --user "user_github"
## gitpratico --proj --commit "criação projeto" --user "user_github"
elif [[ "${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

## gitpratico -c -u -p "projeto1"
## gitpratico -c -u "user_github" -p "projeto1"
## gitpratico --commit --user --proj "projeto1"
## gitpratico --commit --user "user_github" --proj "projeto1"
elif [[ "${COMMIT}" == "-u" || "${COMMIT}" == "--user" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-c | --commit \"coment create project\"]\033[0m\n"
help


## gitpratico -c -p -u "user_github"
## gitpratico -c -p "projeto1" -u "user_github"
## gitpratico --commit --proj --user "user_github"
## gitpratico --commit --proj "projeto1" --user "user_github"
elif [[ "${COMMIT}" == "-p" || "${COMMIT}" == "--proj" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-c | --commit \"coment create project\"]\033[0m"
echo -e "\e[1;31mFalta\033[1.32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help

## gitpratico -u "" -p "" -c "comentario"
## gitpratico --user "" --proj "" --commit "comentario"
elif [[ -z "${USER_GIT}" && -z "${PROJECT_NAME}" ]]; then

echo -e "\e[1;31mFalta &&\033[1;32m: \e[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta &&\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help

## gitpratico -u "user_github" -c "comentário"
## gitpratico -u "user_github" -c "comentário" -p ""
elif [[ -z "${PROJECT_NAME}" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help

## gitpratico -p "projeto1" -c "comentário projeto1"
## gitpratico -p "projeto1" -c "comentário projeto1" -u ""
elif [[ -z "${USER_GIT}" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \e[1;31m[-u | --user \"<user_github>\"]\033[0m\n"
help

## gitpratico -u "user_github" -p "projeto1"
## gitpratico -u "user_github" -p "projeto1" -c ""
elif [[ -z "${COMMIT}" ]]; then

## Caso não especifique um comentario sobre a criação do projeto definiremos um comentario padrão
COMMIT="Repository ${PROJECT_NAME} created by ${USER_GIT}"
fi

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

fi



wiki.anon


  


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

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 18:11h

Olá! Parece que você está com alguns problemas na análise dos argumentos do seu script bash. Vamos abordar cada problema e tentar corrigi-los.

1. Primeiro, vamos analisar a criação do repositório remoto no GitHub com nomes incorretos. Isso acontece devido à falta de espaços entre a opção e o valor do argumento. No seu caso, tente adicionar espaços entre as opções e os valores dos argumentos, conforme mostrado abaixo:

```
./script -u "githubuser" -p "projeto1" -c "comentario"
./script -u "githubuser" --proj "projeto1" --commit "comentario"
```

2. Para resolver o problema dos argumentos vazios, vamos fazer algumas verificações adicionais no seu script. Primeiramente, vamos verificar se `USER_GIT`, `PROJECT_NAME` e `COMMIT` não estão em branco após o `while`. Para isso, adicione o seguinte código:

```bash
if [[ -z "${USER_GIT}" || -z "${PROJECT_NAME}" || -z "${COMMIT}" ]]; then
echo "Algum argumento está vazio:"
echo "Usuário GitHub: ${USER_GIT}"
echo "Nome do projeto: ${PROJECT_NAME}"
echo "Comentário: ${COMMIT}"


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

César
dark777

(usa Debian)

Enviado em 03/05/2023 - 18:20h


alexabolada escreveu:

Olá! Parece que você está com alguns problemas na análise dos argumentos do seu script bash. Vamos abordar cada problema e tentar corrigi-los.

1. Primeiro, vamos analisar a criação do repositório remoto no GitHub com nomes incorretos. Isso acontece devido à falta de espaços entre a opção e o valor do argumento. No seu caso, tente adicionar espaços entre as opções e os valores dos argumentos, conforme mostrado abaixo:

```
./script -u "githubuser" -p "projeto1" -c "comentario"
./script -u "githubuser" --proj "projeto1" --commit "comentario"
```

2. Para resolver o problema dos argumentos vazios, vamos fazer algumas verificações adicionais no seu script. Primeiramente, vamos verificar se `USER_GIT`, `PROJECT_NAME` e `COMMIT` não estão em branco após o `while`. Para isso, adicione o seguinte código:

```bash
if [[ -z "${USER_GIT}" || -z "${PROJECT_NAME}" || -z "${COMMIT}" ]]; then
echo "Algum argumento está vazio:"
echo "Usuário GitHub: ${USER_GIT}"
echo "Nome do projeto: ${PROJECT_NAME}"
echo "Comentário: ${COMMIT}"



@alexabolada isso eu ja estou fazendo mas o problema é que o usuário pode usar sem digitar os espaços após as opções é isso que estou tentando corrigir e verificar argmentos vazios entre as aspas duplas para não criar repositórios com a opção.

caso o usuário faça:

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



wiki.anon


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

Alexa Bolada
alexabolada

(usa Debian)

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

Olá, wiki.anon! Entendo sua preocupação com a possibilidade do usuário não inserir os espaços corretamente. Vamos tentar melhorar a verificação dos argumentos no script bash para lidar com esta situação.

Para verificar a presença de espaços após as opções e argumentos vazios entre aspas duplas, você pode usar a seguinte estratégia:

1. Use a opção `shift` para remover as opções já processadas e manter apenas os valores dos argumentos.

2. Verifique os valores dos argumentos antes de atribuí-los às variáveis correspondentes e valide se eles estão preenchidos corretamente.

Aqui está uma sugestão de como modificar o script bash:

```bash
#!/bin/bash

while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-u|--user)
shift
USER_GIT="$1"
shift
;;
-p|--proj)
shift
PROJECT_NAME="$1"
shift
;;
-c|--commit)
shift
COMMIT="$1"
shift
;;
*)
echo "Opção desconhecida: $key"
exit 1
;;
esac
done

# Verificar se os argumentos estão vazios ou contêm apenas espaços
if [[ -z "${USER_GIT// }


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

César
dark777

(usa Debian)

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


alexabolada escreveu:

Olá, wiki.anon! Entendo sua preocupação com a possibilidade do usuário não inserir os espaços corretamente. Vamos tentar melhorar a verificação dos argumentos no script bash para lidar com esta situação.

Para verificar a presença de espaços após as opções e argumentos vazios entre aspas duplas, você pode usar a seguinte estratégia:

1. Use a opção `shift` para remover as opções já processadas e manter apenas os valores dos argumentos.

2. Verifique os valores dos argumentos antes de atribuí-los às variáveis correspondentes e valide se eles estão preenchidos corretamente.

Aqui está uma sugestão de como modificar o script bash:

```bash
#!/bin/bash

while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-u|--user)
shift
USER_GIT="$1"
shift
;;
-p|--proj)
shift
PROJECT_NAME="$1"
shift
;;
-c|--commit)
shift
COMMIT="$1"
shift
;;
*)
echo "Opção desconhecida: $key"
exit 1
;;
esac
done

# Verificar se os argumentos estão vazios ou contêm apenas espaços
if [[ -z "${USER_GIT// }


Eu coloquei o shift e esta da seguinte forma abaixo:


#!/usr/bin/bash

function help() {
echo -e "\n\e[1;34mO script \e[1;31m${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;35m-u \"<usuario_git>\" -p \"<project_name>\" -c \"comentário sobre projeto\"\033[0m"
echo -e "\n\e[1;31mOptions\e[1;32m:\n\e[1;34m[-u | --user: Opção para usuário github]\n\n[-p | --proj: Opção para nome do projeto a subir no github]\n\n[-c | --commit: Opção para comentar o criação do projeto]\033[0m\n\n"

exit 1
}

ACESS_TOKEN="MY_TOKEN_GITHUB"

# Processa os argumentos usando getopt
# Os ":" após as opções força a digitar um argumento
OPTS=$(getopt -o u:,p:,c:,h --long user:,proj:,commit:,help -n ${0} -- "$@") || exit

# Atribui os argumentos às variáveis
eval set -- "${OPTS}"

if [ $# -lt 3 ]; then
help
else
while :; do
case "${1}" in

-u | --user)
shift
USER_GIT="${2}"

## Pegar o argumento 2 após a opção
shift 2
;;

-p | --proj)
shift
PROJECT_NAME="${2}"

## Pegar o argumento 2 após a opção
shift 2
;;

-c | --commit)
shift
COMMIT="${2}"

## Pega o argumento 2 após a opção
shift 2
;;

-h | --help)
help

# Para não dar loop infinito ao usar -h | --help
shift
;;

--)
# Skip --
shift
break
;;
*)
echo -e "\e[1;31mOpção inválida\033[1;32m: \033[1;31m${1}\033[0m"
exit 1
;;
esac

done


## 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"
if [[ "${USER_GIT}" == "-p" || "${USER_GIT}" == "--proj" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help


## gitpratico -u -c -p "projeto1"
## gitpratico -u -c "criação projeto" -p "projeto1"
## gitpratico --user --commit --proj "projeto1"
## gitpratico --user --commit "criação projeto" --proj "projeto1"
elif [[ "${USER_GIT}" == "-c" || "${USER_GIT}" == "--commit" ]]; then

echo -e "\e[1;31mFalta\033[1;32m]: \033[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-c | --commit \"coment create project\"]\033[0m\n"
help


## gitpratico -p -u -c "criação projeto"
## gitpratico -p -u "user_github" -c "criação projeto"
## gitpratico --proj --user -commit "criação projeto"
## gitpratico --proj --user "user_github" --commit "criação projeto"
elif [[ "${PROJECT_NAME}" == "-u" || "${PROJECT_NAME}" == "--user" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\[0m]"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-u | --user \"<user_github>\"]\033[0m\n"
help


## gitpratico -p -c -u "user_github"
## gitpratico -p -c "criação projeto" -u "user_github"
## gitpratico --proj --commit --user "user_github"
## gitpratico --proj --commit "criação projeto" --user "user_github"
elif [[ "${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

## gitpratico -c -u -p "projeto1"
## gitpratico -c -u "user_github" -p "projeto1"
## gitpratico --commit --user --proj "projeto1"
## gitpratico --commit --user "user_github" --proj "projeto1"
elif [[ "${COMMIT}" == "-u" || "${COMMIT}" == "--user" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-c | --commit \"coment create project\"]\033[0m\n"
help


## gitpratico -c -p -u "user_github"
## gitpratico -c -p "projeto1" -u "user_github"
## gitpratico --commit --proj --user "user_github"
## gitpratico --commit --proj "projeto1" --user "user_github"
elif [[ "${COMMIT}" == "-p" || "${COMMIT}" == "--proj" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-c | --commit \"coment create project\"]\033[0m"
echo -e "\e[1;31mFalta\033[1.32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help

## gitpratico -u "" -p "" -c "comentario"
## gitpratico --user "" --proj "" --commit "comentario"
elif [[ -z "${USER_GIT}" && -z "${PROJECT_NAME}" ]]; then

echo -e "\e[1;31mFalta &&\033[1;32m: \e[1;31m[-u | --user \"<user_github>\"]\033[0m"
echo -e "\e[1;31mFalta &&\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help

## gitpratico -u "user_github" -c "comentário"
## gitpratico -u "user_github" -c "comentário" -p ""
elif [[ -z "${PROJECT_NAME}" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \033[1;31m[-p | --proj \"<project_name>\"]\033[0m\n"
help

## gitpratico -p "projeto1" -c "comentário projeto1"
## gitpratico -p "projeto1" -c "comentário projeto1" -u ""
elif [[ -z "${USER_GIT}" ]]; then

echo -e "\e[1;31mFalta\033[1;32m: \e[1;31m[-u | --user \"<user_github>\"]\033[0m\n"
help

## gitpratico -u "user_github" -p "projeto1"
## gitpratico -u "user_github" -p "projeto1" -c ""
elif [[ -z "${COMMIT}" ]]; then

## Caso não especifique um comentario sobre a criação do projeto definiremos um comentario padrão
COMMIT="Repository ${PROJECT_NAME} created by ${USER_GIT}"
fi

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

fi


Ao digitar:

./script_teste -u "githubuser" -p "projeto1"

Opção inválida: projeto1


E se eu usar shift 2 como abaixo:

Ao executar: ./script_teste -u "githubuser" -p "projeto1"

while :; do
case "${1}" in

-u | --user)
shift 2
USER_GIT="${2}"

## Pegar o argumento 2 após a opção
shift 2
;;

-p | --proj)
shift 2
PROJECT_NAME="${2}"

## Pegar o argumento 2 após a opção
shift 2
;;

-c | --commit)
shift 2
COMMIT="${2}"

## Pega o argumento 2 após a opção
shift 2
;;

-h | --help)
help

# Para não dar loop infinito ao usar -h | --help
shift
;;

--)
# Skip --
shift
break
;;
*)
echo -e "\e[1;31mOpção inválida\033[1;32m: \033[1;31m${1}\033[0m"
exit 1
;;
esac

done

echo "USERGIT: ${USER_GIT} PROJECT: ${PROJECT_NAME}"
USERGIT: projeto1 PROJECT:
Falta: [-p | --proj "<project_name>"]



wiki.anon


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

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 19:14h

Olá, wiki.anon! Vamos ajustar o script bash para lidar com o problema que você está enfrentando. O problema ocorre por causa da ordem das operações após o comando `shift`.

Em vez de usar `shift 2`, primeiro atribua a variável e depois use um único `shift`. Aqui está a versão corrigida do script:

```bash
while :; do
case "${1}" in

-u | --user)
USER_GIT="${2}"
shift 2
;;

-p | --proj)
PROJECT_NAME="${2}"
shift 2
;;

-c | --commit)
COMMIT="${2}"
shift 2
;;

-h | --help)
help
shift
;;

--)
# Skip --
shift
break
;;
*)
echo -e "\\e[1;31mOpção inválida\033[1;32m: \033[1;31m${1}\033[0m"
exit 1
;;
esac
done
```

Agora, ao executar `./script_teste -u "githubuser" -p "projeto1"`, a saída deve exibir corretamente as variáveis `USER_GIT` e


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

César
dark777

(usa Debian)

Enviado em 03/05/2023 - 19:30h


alexabolada escreveu:

Olá, wiki.anon! Vamos ajustar o script bash para lidar com o problema que você está enfrentando. O problema ocorre por causa da ordem das operações após o comando `shift`.

Em vez de usar `shift 2`, primeiro atribua a variável e depois use um único `shift`. Aqui está a versão corrigida do script:

```bash
while :; do
case "${1}" in

-u | --user)
USER_GIT="${2}"
shift 2
;;

-p | --proj)
PROJECT_NAME="${2}"
shift 2
;;

-c | --commit)
COMMIT="${2}"
shift 2
;;

-h | --help)
help
shift
;;

--)
# Skip --
shift
break
;;
*)
echo -e "\\e[1;31mOpção inválida\033[1;32m: \033[1;31m${1}\033[0m"
exit 1
;;
esac
done
```

Agora, ao executar `./script_teste -u "githubuser" -p "projeto1"`, a saída deve exibir corretamente as variáveis `USER_GIT` e


@alexabolada o script já estava com essa sugestão pegando o shift 2 após os argumentos eu só adicionei o shift antes como vc sugeriu e fiz os testes e não resolver o problema..

wiki.anon


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

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 19:31h

Olá, wiki.anon! Desculpe pela confusão na minha resposta anterior. Vamos tentar uma abordagem diferente para corrigir o script.

Podemos usar a estrutura `while` com `getopts` para lidar com as opções do script bash. Aqui está a versão atualizada do script:


#!/bin/bash

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


Agora, ao executar ./script_teste -u "githubuser" -p "projeto1", a saída deve exibir corretamente as variáveis `USER_GIT` e `PROJECT_NAME`.

Se você ainda estiver enfrentando problemas, por favor, forneça mais informações e terei prazer em ajudá-lo a encontrar a solução.


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

César
dark777

(usa Debian)

Enviado em 03/05/2023 - 19:40h


alexabolada escreveu:

Olá, wiki.anon! Desculpe pela confusão na minha resposta anterior. Vamos tentar uma abordagem diferente para corrigir o script.

Podemos usar a estrutura `while` com `getopts` para lidar com as opções do script bash. Aqui está a versão atualizada do script:


#!/bin/bash

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


Agora, ao executar ./script_teste -u "githubuser" -p "projeto1", a saída deve exibir corretamente as variáveis `USER_GIT` e `PROJECT_NAME`.

Se você ainda estiver enfrentando problemas, por favor, forneça mais informações e terei prazer em ajudá-lo a encontrar a solução.


@alexabolada isso não resolve o problema ainda assim eu tenho que verificar o que foi passado nos argumentos do script e tentar resolver estes problemas..

wiki.anon


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

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 19:40h

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 "


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

César
dark777

(usa Debian)

Enviado em 03/05/2023 - 20:17h


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 essa sugestão só verifica se a variável for realmente vazia se o usuário fizer algo como: ./script -u -p "projeto1" eu tenho o mesmo problema do script anterior

wiki.anon


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

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 03/05/2023 - 20:18h

Olá, wiki.anon! Obrigada pelo retorno, entendi sua preocupação. Você está certo, a verificação atual não cobre todos os casos em que os argumentos podem estar ausentes. Vamos adicionar uma condição extra para verificar se as opções foram fornecidas corretamente:

[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
}

# Variáveis para verificar se as opções foram fornecidas
user_git_option=false
project_name_option=false
commit_option=false

while getopts ":u:p:c:h" opt; do
case $opt in
u)
USER_GIT="$OPTARG"
user_git_option=true
;;
p)
PROJECT_NAME="$OPTARG"
project_name_option=true
;;
c)
COMMIT="$OPTARG"
commit_option=true
;;
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_G



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts