Estou com um problema a mais tempo que não consigo enxergar a solução, vou descrever abaixo:
Eu preciso executar o script passando a opção, esta opção está associada a uma função e logo após armazenar o argumento nome_do_arquivo.txt em uma variavel para depois ser executada esta função com está variavel . Exemplo ./script.sh exec_teste0 nome_do_arquivo.txt
O Motivo e retirar read file_teste de dentro da função e faze-lo ser lido como um argumento de exec_teste0 no case.
#!/bin/bash
func_exec_teste0() {
if test "${chave_teste}" = "1"
then
echo "$msg_arq"
read file_teste
for teste in $(cat /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_TESTE/,/END_TESTE/p' | egrep -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/${teste}/ ${file_teste} > ${teste}.tcl ; chmod 700 ./${teste}.tcl ; ./${teste}.tcl >> strace.txt ; rm -rf ${teste}.tcl
done
else
echo "BATCH TESTE ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
if [[ -f "$_arquivo" ]]; then
echo "Processando o arquivo: $_arquivo"
return 0
else
echo "[ E ]: Arquivo não encontrado."
return 1
fi
}
if [[ $# -ne 2 ]]; then
echo "[ E ]: Quantidade inválida de argumentos."
exit 1
elif [[ "$1" == "--processar" ]]; then
processar "$2"
exit $?
else
echo "[ E ]: Esse argumento não é válido."
exit 1
fi
Use desse jeito:
./script.sh --processar arquivo.txt
3. Re: Opções e Argumentos
RogerDezusa Outra
Post recolhido
Enviado em 22/03/2020 - 23:21h
supondo que seja em bash, use o 'shellcheck' antes:
sim pq vc não explicou direito . mostre o código todo
4. Opções e Argumentos
thiago304usa Debian
Post recolhido
Enviado em 22/03/2020 - 23:27h
Colega ,
Agora entendi, assim eu estou sendo o maximo de objetivo possivel de forma a focar no problema, outras partes do codigo não faz sentido para este problema.
Se você observar o trecho que preciso resolver e este que enviei, a parte do sed esta funcionando perfeitamente para mim o que preciso e criar um sistema de opções e argumentos para meu script, já cogitei utilizar getops, mas pelo que vi e bem limitado e não me atende.
Att,
Tiago Eduardo Zacarias
5. Re: Opções e Argumentos [RESOLVIDO]
RogerDezusa Outra
Post recolhido
Enviado em 23/03/2020 - 01:05h
poste o código inteiro
6. Re: Opções e Argumentos
thiago304usa Debian
Post recolhido
Enviado em 23/03/2020 - 12:16h
Ola Colega,
Segue o codigo inteiro conforme solicitado, já rodei o shellcheck e corrigi algumas coisas conforme recomendações, ficou pendente um correção na parte dos loops , por enquanto deixarei como está, voltado para foco no problema inicial, necessito executar o shell com opções e argumentos.
Estou com um problema a mais tempo que não consigo enxergar a solução, vou descrever abaixo:
Eu preciso executar o script passando a opção, esta opção está associada a uma função e logo após armazenar o argumento nome_do_arquivo.txt em uma variavel para depois ser executada esta função com está variavel .
Exemplo
./script.sh exec_teste0 nome_do_arquivo.txt
O Motivo e retirar read file_teste de dentro da função e faze-lo ser lido como um argumento de exec_teste0 no case.
#!/bin/bash
func_exec_teste0() {
if test "${chave_teste}" = "1"
then
echo "$msg_arq"
read file_teste
for teste in $(cat /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_TESTE/,/END_TESTE/p' | egrep -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/${teste}/ ${file_teste} > ${teste}.tcl ; chmod 700 ./${teste}.tcl ; ./${teste}.tcl >> strace.txt ; rm -rf ${teste}.tcl
done
else
echo "BATCH TESTE ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
esac
Alguém poderia me ajudar com essa logica, fico agradecido .
Boa noite thiago304.
Para facilitar a ajuda,
Explique o que precisa, qual o resultado pretendido, e detalhe as informações que tem.
Sinceramente, me perdi no seu script.......
function executar() {
echo "Executando a tarefa."
}
function preparar() {
echo "Preparando o ambiente."
}
function analisar() {
echo "Analisando as informações."
}
function erro() {
echo "Opa, essa opção não é válida."
}
#
# Sequencia principal do script
#
if [[ "$1" == "--ajuda" ]]; then
ajuda
elif [[ "$1" == "--executar" ]]; then
executar
elif [[ "$1" == "--preparar" ]]; then
preparar
elif [[ "$1" == "--analisar" ]]; then
analisar
else
erro
exit 1
fi
exit 0
9. Re: Opções e Argumentos
thiago304usa Debian
Post recolhido
Enviado em 25/03/2020 - 10:22h
Bom dia Colega,
Este codigo que você mandou atualmente e como está o meu script, so que você utilizou condicional com if e elif , eu utilizei as condicionais para chamar as funções com o case.
Em nosso cenário atual, quando eu rodo ./batch_key.sh exec_all_cisco ele executa a primeiro opção indo para uma função que me pede um nome de arquivo. Eu quero passar o nome deste arquivo logo antes de executar a função entende, ficando conforme o comando acima ./batch_key.sh exec_all_cisco nome_do_arquivo.tcl
Com este comando ele saberá qual e a primeira opção que neste caso estará associada a uma função e como eu passei o nome do arquivo ele já vai executar esta função sabendo do nome do arquivo que ele precizará buscar no diretorio.
Este arquivo que seria um argumento da opção e necessário para que a função seja executada com sucesso ou seja, dependo deste arquivo para finalizar as instruções da função.
Se você observar hoje eu pego o nome do arquivo dentro da função com o comando read, o script fica esperando eu passar o nome do arquivo para depois jogar para variável e depois continuar a executar a função, eu penso que se passar o nome do arquivo logo já na execução do comando fica mais atraente.
adrisiq escreveu:
É algo assim que você precisa?
#!/usr/bin/env bash
function ajuda() {
echo "Vou ajudar você."
}
function executar() {
echo "Executando a tarefa."
}
function preparar() {
echo "Preparando o ambiente."
}
function analisar() {
echo "Analisando as informações."
}
function erro() {
echo "Opa, essa opção não é válida."
}
#
# Sequencia principal do script
#
if [[ "$1" == "--ajuda" ]]; then
ajuda
elif [[ "$1" == "--executar" ]]; then
executar
elif [[ "$1" == "--preparar" ]]; then
preparar
elif [[ "$1" == "--analisar" ]]; then
analisar
else
erro
exit 1
fi
exit 0
10. Re: Opções e Argumentos [RESOLVIDO]
thiago304usa Debian
Post recolhido
Enviado em 25/03/2020 - 10:55h
Colega,
E exatamente issu que preciso, já testei o seu codigo vou adaptar ao meu codigo e já dou o feedbeck.
adrisiq escreveu:
Que tal assim?
#!/usr/bin/env bash
function processar() {
_arquivo="$1"
if [[ -f "$_arquivo" ]]; then
echo "Processando o arquivo: $_arquivo"
return 0
else
echo "[ E ]: Arquivo não encontrado."
return 1
fi
}
if [[ $# -ne 2 ]]; then
echo "[ E ]: Quantidade inválida de argumentos."
exit 1
elif [[ "$1" == "--processar" ]]; then
processar "$2"
exit $?
else
echo "[ E ]: Esse argumento não é válido."
exit 1
fi
Use desse jeito:
./script.sh --processar arquivo.txt
11. Teste Final
thiago304usa Debian
Post recolhido
Enviado em 25/03/2020 - 15:24h
Prezados,
Agradeço a ajuda de todos , ficou resolvido esta questão segue abaixo a parte do codigo que possibilitou resolver o problema:
#!/bin/bash
func_exec_teste() {
if [ "${chave_teste}" = "1" ] ; then
if [ "$1" != "" ] ; then
for teste in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_TESTE/,/END_TESTE/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${teste}"/ "${1}" > "${teste}".tcl ; chmod 700 ./"${teste}".tcl ; ./"${teste}".tcl >> strace.txt ; rm -rf "${teste}".tcl
done
else
echo "Indicar o arquivo expect"
exit 1
fi
else
echo "BATCH TESTE ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
exit 0
fi
}
if [[ $# -ne 1 && $# -ne 2 ]]; then
echo "[ E ]: Quantidade inválida de argumentos."
exit 1
elif [[ "$1" == "-h" ]]; then
func_exec_help
exit $?
elif [[ "$1" == "--help" ]]; then
func_exec_help
exit $?