Opções e Argumentos [RESOLVIDO]

1. Opções e Argumentos [RESOLVIDO]

Tiago Eduardo Zacarias
thiago304

(usa Debian)

Enviado em 22/03/2020 - 23:12h

Ola Comunidade,

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

fi

}

case "${1}" in

exec_teste0) func_exec_teste0 ;;
exec_teste1) func_exec_teste1 ;;

esac



Alguém poderia me ajudar com essa logica, fico agradecido .






  


2. MELHOR RESPOSTA

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 25/03/2020 - 10:40h

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 


3. Re: Opções e Argumentos

Rogerio
RogerDez

(usa Outra)

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

Tiago Eduardo Zacarias
thiago304

(usa Debian)

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]

Rogerio
RogerDez

(usa Outra)

Enviado em 23/03/2020 - 01:05h

poste o código inteiro


6. Re: Opções e Argumentos

Tiago Eduardo Zacarias
thiago304

(usa Debian)

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.

#!/usr/bin/env bash
# Autor : Tiago Eduardo Zacarias
# Versão: 1.2.1
# Data: 22-03-2020

# Variáveis
dia="$(date +%d)"
mes="$(date +%m)"
ano="$(date +%Y)"
version="1.2.1"
msg_arq="INDIQUE O ARQUIVO EXPECT"

# Variáveis de chaves: opcões 0/1 | Desativado/Ativado
chave_all_cisco="1"
chave_cisco_2501="1"
chave_cisco_nexus="1"
chave_cisco_mc3810="1"
chave_cisco_ie_3000="1"
chave_cisco_grwic="1"
chave_cisco_cgs_2520="1"
chave_cisco_cgs_2010="1"
chave_cisco_asr_903="1"
chave_cisco_asr_1006="1"
chave_cisco_asr_1002="1"
chave_cisco_6513="1"
chave_cisco_6509="1"
chave_cisco_4507="1"
chave_cisco_1760="1"
chave_cisco_4506="1"
chave_cisco_4503="1"
chave_cisco_4331="1"
chave_cisco_4321="1"
chave_cisco_3945="1"
chave_cisco_3850="1"
chave_cisco_3750="1"
chave_cisco_3662="1"
chave_cisco_3560="1"
chave_cisco_2950="1"
chave_cisco_2924="1"
chave_cisco_2921="1"
chave_cisco_2821="1"
chave_cisco_2811ve="1"
chave_cisco_2621="1"
chave_cisco_2511="1"
chave_cisco_2960="1"
chave_cisco_1120="1"
chave_cisco_2801="1"
chave_cisco_1941="1"
chave_datacom_dm_1200e="1"
chave_dlink_dgs_1510="1"
chave_cisco_sf300="1"
chave_teste="1"


#TODO
# Pendente reduzir a quantidade de loops.

# Funções

func_exec_all_cisco () {


if test "${chave_all_cisco}" = "1"

then

echo "$msg_arq"
read -r file_cisco_all
for c_all in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_ALL_CISCO/,/END_ALL_CISCO/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c_all}"/ "${file_cisco_all}" > "${c_all}".tcl ; chmod 700 ./"${c_all}".tcl ; ./"${c_all}".tcl >> strace.txt ; rm -rf "${c_all}".exp
done

else

echo "BATCH ALL HOSTS ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_teste() {


if test "${chave_teste}" = "1"

then

echo "$msg_arq"
read -r file_teste
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}"/ "${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}"

fi

}

func_exec_cisco_2501() {


if test "${chave_cisco_2501}" = "1"

then

echo "$msg_arq"
read -r file_2501
for c2501 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2501/,/END_C2501/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2501}"/ "${file_2501}" > "${c2501}".tcl ; chmod 700 ./"${c2501}".tcl ; ./"${c2501}".tcl >> strace.txt ; rm -rf "${c2501}".tcl
done

else

echo "BATCH CISCO 2501 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_nexus() {


if test "${chave_cisco_nexus}" = "1"

then

echo "$msg_arq"
read -r file_nexus
for cnexus in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CNEXUS/,/END_CNEXUS/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${cnexus}"/ "${file_nexus}" > "${cnexus}".tcl ; chmod 700 ./"${cnexus}".tcl ; ./"${cnexus}".tcl >> strace.txt ; rm -rf "${cnexus}".tcl
done

else

echo "BATCH CISCO NEXUS ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_MC3810() {


if test "${chave_cisco_mc3810}" = "1"

then

echo "$msg_arq"
read -r file_mc3810
for cmc3810 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CMC3810/,/END_CMC3810/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${cmc3810}"/ "${file_mc3810}" > "${cmc3810}".tcl ; chmod 700 ./"${cmc3810}".tcl ; ./"${cmc3810}".tcl >> strace.txt ; rm -rf "${cmc3810}".tcl
done

else

echo "BATCH CISCO MC3810 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_IE_3000() {


if test "${chave_cisco_ie_3000}" = "1"

then

echo "$msg_arq"
read -r file_ie_3000
for cie_3000 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CIE3000/,/END_CIE3000/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${cie_3000}"/ "${file_ie_3000}" > "${cie_3000}".tcl ; chmod 700 ./"${cie_3000}".tcl ; ./"${cie_3000}".tcl >> strace.txt ; rm -rf "${cie_3000}".tcl
done

else

echo "BATCH CISCO IE-3000 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_grwic() {


if test "${chave_cisco_grwic}" = "1"

then

echo "$msg_arq"
read -r file_grwic
for cgrwic in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CGRWIC/,/END_CGRWIC/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${cgrwic}"/ "${file_grwic}" > "${cgrwic}".tcl ; chmod 700 ./"${cgrwic}".tcl ; ./"${cgrwic}".tcl >> strace.txt ; rm -rf "${cgrwic}".tcl
done

else

echo "BATCH CISCO GRWIC ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_cgs_2520() {


if test "${chave_cisco_cgs_2520}" = "1"

then

echo "$msg_arq"
read -r file_cgs_2520
for ccgs_2520 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CCGR2520/,/END_CGR2520/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${ccgs_2520}"/ "${file_cgs_2520}" > "${ccgs_2520}".tcl ; chmod 700 ./"${ccgs_2520}".tcl ; ./"${ccgs_2520}".tcl >> strace.txt ; rm -rf "${ccgs_2520}".tcl
done

else

echo "BATCH CISCO CGS 2520 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_cgr_2010() {


if test "${chave_cisco_cgs_2010}" = "1"

then

echo "$msg_arq"
read -r file_cgr_2010
for ccgr_2010 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CCGR2010/,/END_CCGR2010/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${ccgr_2010}"/ "${file_cgr_2010}" > "${ccgr_2010}".tcl ; chmod 700 ./"${ccgr_2010}".tcl ; ./"${ccgr_2010}".tcl >> strace.txt ; rm -rf "${ccgr_2010}".tcl
done

else

echo "BATCH CISCO CGR 2010 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_asr_903() {


if test "${chave_cisco_asr_903}" = "1"

then

echo "$msg_arq"
read -r file_asr_903
for casr_903 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CASR903/,/END_CASR903/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${casr_903}"/ "${file_asr_903}" > "${casr_903}".tcl ; chmod 700 ./"${casr_903}".tcl ; ./"${casr_903}".tcl >> strace.txt ; rm -rf "${casr_903}".tcl
done

else

echo "BATCH CISCO ASR 903 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_asr_1006() {


if test "${chave_cisco_asr_1006}" = "1"

then

echo "$msg_arq"
read -r file_asr_1006
for casr_1006 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CASR1006/,/END_CASR1006/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${casr_1006}"/ "${file_asr_1006}" > "${casr_1006}".tcl ; chmod 700 ./"${casr_1006}".tcl ; ./"${casr_1006}".tcl >> strace.txt ; rm -rf "${casr_1006}".tcl
done

else

echo "BATCH CISCO ASR 1006 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_asr_1002() {


if test "${chave_cisco_asr_1002}" = "1"

then

echo "$msg_arq"
read -r file_asr_1002
for casr_1002 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CASR1002/,/END_CASR1002/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${casr_1002}"/ "${file_asr_1002}" > "${casr_1002}".tcl ; chmod 700 ./"${casr_1002}".tcl ; ./"${casr_1002}".tcl >> strace.txt ; rm -rf "${casr_1002}".tcl
done

else

echo "BATCH CISCO ASR 1002 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_6513() {


if test "${chave_cisco_6513}" = "1"

then

echo "$msg_arq"
read -r file_6513
for c6513 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C6513/,/END_C6513/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c6513}"/ "${file_6513}" > "${c6513}".tcl ; chmod 700 ./"${c6513}".tcl ; ./"${c6513}".tcl >> strace.txt ; rm -rf "${c6513}".tcl
done

else

echo "BATCH CISCO 6513 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_6509() {


if test "${chave_cisco_6509}" = "1"

then

echo "$msg_arq"
read -r file_6509
for c6509 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C6509/,/END_C6509/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c6509}"/ "${file_6509}" > "${c6509}".tcl ; chmod 700 ./"${c6509}".tcl ; ./"${c6509}".tcl >> strace.txt ; rm -rf "${c6509}".tcl
done

else

echo "BATCH CISCO 6509 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_4507() {


if test "${chave_cisco_4507}" = "1"

then

echo "$msg_arq"
read -r file_4507
for c4507 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C4507/,/END_C4507/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c4507}"/ "${file_4507}" > "${c4507}".tcl ; chmod 700 ./"${c4507}".tcl ; ./"${c4507}".tcl >> strace.txt ; rm -rf "${c4507}".tcl
done

else

echo "BATCH CISCO 4507 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_4506() {


if test "${chave_cisco_4506}" = "1"

then

echo "$msg_arq"
read -r file_4506
for c4506 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C4506/,/END_C4506/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c4506}"/ "${file_4506}" > "${c4506}".tcl ; chmod 700 ./"${c4506}".tcl ; ./"${c4506}".tcl >> strace.txt ; rm -rf "${c4506}".tcl
done

else

echo "BATCH CISCO 4506 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_4503() {


if test "${chave_cisco_4503}" = "1"

then

echo "$msg_arq"
read -r file_4503
for c4503 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C4503/,/END_C4503/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c4503}"/ "${file_4503}" > "${c4503}".tcl ; chmod 700 ./"${c4503}".tcl ; ./"${c4503}".tcl >> strace.txt ; rm -rf "${c4503}".tcl
done

else

echo "BATCH CISCO 4503 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_4331() {


if test "${chave_cisco_4331}" = "1"

then

echo "$msg_arq"
read -r file_4331
for c4331 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C4331/,/END_C4331/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c4331}"/ "${file_4331}" > "${c4331}".tcl ; chmod 700 ./"${c4331}".tcl ; ./"${c4331}".tcl >> strace.txt ; rm -rf "${c4331}".tcl
done

else

echo "BATCH CISCO 4331 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_4321() {


if test "${chave_cisco_4321}" = "1"

then

echo "$msg_arq"
read -r file_4321
for c4321 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C4331/,/END_C4331/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c4321}"/ "${file_4321}" > "${c4321}".tcl ; chmod 700 ./"${c4321}".tcl ; ./"${c4321}".tcl >> strace.txt ; rm -rf "${c4321}".tcl
done

else

echo "BATCH CISCO 4321 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_3945() {


if test "${chave_cisco_3945}" = "1"

then

echo "$msg_arq"
read -r file_3945
for c3945 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C3945/,/END_C3945/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c3945}"/ "${file_3945}" > "${c3945}".tcl ; chmod 700 ./"${c3945}".tcl ; ./"${c3945}".tcl >> strace.txt ; rm -rf "${c3945}".tcl
done

else

echo "BATCH CISCO 3945 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_3850() {


if test "${chave_cisco_3850}" = "1"

then

echo "$msg_arq"
read -r file_3850
for c3850 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C3850/,/END_C3850/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c3850}"/ "${file_3850}" > "${c3850}".tcl ; chmod 700 ./"${c3850}".tcl ; ./"${c3850}".tcl >> strace.txt ; rm -rf "${c3850}".tcl
done

else

echo "BATCH CISCO 3850 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_3750() {


if test "${chave_cisco_3750}" = "1"

then

echo "$msg_arq"
read -r file_3750
for c3750 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C3750/,/END_C3750/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c3750}"/ "${file_3750}" > "${c3750}".tcl ; chmod 700 ./"${c3750}".tcl ; ./"${c3750}".tcl >> strace.txt ; rm -rf "${c3750}".tcl
done

else

echo "BATCH CISCO 3750 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_3662() {


if test "${chave_cisco_3662}" = "1"

then

echo "$msg_arq"
read -r file_3662
for c3662 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C3662/,/END_C3662/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c3662}"/ "${file_3662}" > "${c3662}".tcl ; chmod 700 ./"${c3662}".tcl ; ./"${c3662}".tcl >> strace.txt ; rm -rf "${c3662}".tcl
done

else

echo "BATCH CISCO 3662 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_3560() {


if test "${chave_cisco_3560}" = "1"

then

echo "$msg_arq"
read -r file_3560
for c3560 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C3560/,/END_C3560/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c3560}"/ "${file_3560}" > "${c3560}".tcl ; chmod 700 ./"${c3560}".tcl ; ./"${c3560}".tcl >> strace.txt ; rm -rf "${c3560}".tcl
done

else

echo "BATCH CISCO 3560 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2950() {


if test "${chave_cisco_2950}" = "1"

then

echo "$msg_arq"
read -r file_2950
for c2950 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2950/,/END_C2950/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2950}"/ "${file_2950}" > "${c2950}".tcl ; chmod 700 ./"${c2950}".tcl ; ./"${c2950}".tcl >> strace.txt ; rm -rf "${c2950}".tcl
done

else

echo "BATCH CISCO 2950 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2924() {


if test "${chave_cisco_2924}" = "1"

then

echo "$msg_arq"
read -r file_2924
for c2924 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2924/,/END_C2924/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2924}"/ "${file_2924}" > "${c2924}".tcl ; chmod 700 ./"${c2924}".tcl ; ./"${c2924}".tcl >> strace.txt ; rm -rf "${c2924}".tcl
done

else

echo "BATCH CISCO 2924 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2921() {


if test "${chave_cisco_2921}" = "1"

then

echo "$msg_arq"
read -r file_2921
for c2921 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2921/,/END_C2921/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2921}"/ "${file_2921}" > "${c2921}".tcl ; chmod 700 ./"${c2921}".tcl ; ./"${c2921}".tcl >> strace.txt ; rm -rf "${c2921}".tcl
done

else

echo "BATCH CISCO 2921 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2821() {


if test "${chave_cisco_2821}" = "1"

then

echo "$msg_arq"
read -r file_2821
for c2821 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2821/,/END_C2821/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2821}"/ "${file_2821}" > "${c2821}".tcl ; chmod 700 ./"${c2821}".tcl ; ./"${c2821}".tcl >> strace.txt ; rm -rf "${c2821}".tcl
done

else

echo "BATCH CISCO 2821 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2811VE() {


if test "${chave_cisco_2811ve}" = "1"

then

echo "$msg_arq"
read -r file_2811VE
for c2811ve in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2811VE/,/END_C2811VE/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2811ve}"/ "${file_2811VE}" > "${c2811ve}".tcl ; chmod 700 ./"${c2811ve}".tcl ; ./"${c2811ve}".tcl >> strace.txt ; rm -rf "${c2811ve}".tcl
done

else

echo "BATCH CISCO 2811VE ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2621() {


if test "${chave_cisco_2621}" = "1"

then

echo "$msg_arq"
read -r file_2621
for c2621 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2621/,/END_C2621/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2621}"/ "${file_2621}" > "${c2621}".tcl ; chmod 700 ./"${c2621}".tcl ; ./"${c2621}".tcl >> strace.txt ; rm -rf "${c2621}".tcl
done

else

echo "BATCH CISCO 2621 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2511() {


if test "${chave_cisco_2511}" = "1"

then

echo "$msg_arq"
read -r file_2511
for c2511 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2511/,/END_C2511/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2511}"/ "${file_2511}" > "${c2511}".tcl ; chmod 700 ./"${c2511}".tcl ; ./"${c2511}".tcl >> strace.txt ; rm -rf "${c2511}".tcl
done

else

echo "BATCH CISCO 2511 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2960() {


if test "${chave_cisco_2960}" = "1"

then

echo "$msg_arq"
read -r file_2960
for c2960 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2911/,/END_C2911/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2960}"/ "${file_2960}" > "${c2960}".tcl ; chmod 700 ./"${c2960}".tcl ; ./"${c2960}".tcl >> strace.txt ; rm -rf "${c2960}".tcl
done

else

echo "BATCH CISCO 2960 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_1120() {


if test "${chave_cisco_1120}" = "1"

then

echo "$msg_arq"
read -r file_1120
for c1120 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C1120/,/END_C1120/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c1120}"/ "${file_1120}" > "${c1120}".tcl ; chmod 700 ./"${c1120}".tcl ; ./"${c1120}".tcl >> strace.txt ; rm -rf "${c1120}".tcl
done

else

echo "BATCH CISCO 1120 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_2801() {


if test "${chave_cisco_2801}" = "1"

then

echo "$msg_arq"
read -r file_2801
for c2801 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C2801/,/END_C2801/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c2801}"/ "${file_2801}" > "${c2801}".tcl ; chmod 700 ./"${c2801}".tcl ; ./"${c2801}".tcl >> strace.txt ; rm -rf "${c2801}".tcl
done

else

echo "BATCH CISCO 2801 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_1760() {


if test "${chave_cisco_1760}" = "1"

then

echo "$msg_arq"
read -r file_1760
for c1760 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C1760/,/END_C1760/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c1760}"/ "${file_1760}" > "${c1760}".tcl ; chmod 700 ./"${c1760}".tcl ; ./"${c1760}".tcl >> strace.txt ; rm -rf "${c1760}".tcl
done

else

echo "BATCH CISCO 1760 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_1941() {


if test "${chave_cisco_1941}" = "1"

then

echo "$msg_arq"
read -r file_1941
for c1941 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_C1941/,/END_C1941/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${c1941}"/ "${file_1941}" > "${c1941}".tcl ; chmod 700 ./"${c1941}".tcl ; ./"${c1941}".tcl >> strace.txt ; rm -rf "${c1941}".tcl
done

else

echo "BATCH CISCO 1941 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_datacom_dm1200e() {


if test "${chave_datacom_dm_1200e}" = "1"

then

echo "$msg_arq"
read -r file_dm1200e
for var_dm_1200e in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_DM1200E/,/END_DM1200E/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${var_dm_1200e}"/ "${file_dm1200e}" > "${var_dm_1200e}".tcl ;
chmod 700 ./"${var_dm_1200e}".tcl ; ./"${var_dm_1200e}".tcl >> strace.txt ; rm -rf "${var_dm_1200e}".tcl
done

else

echo "BATCH DATACOM ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_dlink_dgs-1510() {

if test "${chave_dlink_dgs_1510}" = "1"

then

echo "$msg_arq"
read -r file_dgs1510
for cdgs_1510 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_DGS1510/,/END_DGS1510/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${cdgs_1510}"/ "${file_dgs1510}" > "${cdgs_1510}".tcl ; chmod 700 ./"${cdgs_1510}".tcl ; ./"${cdgs_1510}".tcl >> strace.txt ; rm -rf "${cdgs_1510}".tcl
done

else

echo "BATCH DATACOM ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"
fi

}

func_exec_cisco_sf300() {


if test "${chave_cisco_sf300}" = "1"

then

echo "$msg_arq"
read -r file_sf300
for var_csf300 in $(cat < /etc/hosts | awk '{print $2}' | sed -n '/BEGIN_CSF300/,/END_CSF300/p' | grep -E -v '^([[:space:]]*$|BEGIN|END)');
do sed s/HOST/"${var_csf300}"/ "${file_sf300}" > "${var_csf300}".tcl ; chmod 700 ./"${var_csf300}".tcl ; ./"${var_csf300}".tcl >> strace.txt ; rm -rf "${var_csf300}".tcl
done

else

echo "BATCH CISCO SF300 ESTÁ DESATIVADO | ${dia}-${mes}-${ano}"

fi

}
# Menu de Ajuda


case "${1}" in

-h | --help)


cat << EOF

Uso: ${0} [OPÇÃO]

Opções Válidas:


-V, --version Exibir Versão da Ferramenta

-h, --help Exibir menu de Ajuda

exec_c2960 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2960

exec_c1120 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 1120

exec_c1760 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 1760

exec_c1941 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 1941

exec_c2501 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2501

exec_c2511 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2511

exec_c2621 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2621

exec_c2801 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2801

exec_c2811VE arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2811VE

exec_c2821 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2821

exec_c2921 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2921

exec_c2924 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2924

exec_c2950 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 2950

exec_c3560 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 3560

exec_c3662 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 3662

exec_c3750 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 3750

exec_c3850 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 3850

exec_c3945 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 3945

exec_c4321 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 3321

exec_c4331 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 4331

exec_c4503 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 4503

exec_c4506 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 4506

exec_c4507 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 4507

exec_c6509 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 6509

exec_c6513 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco 6513

exec_casr-1002 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco asr-1002

exec_casr-1006 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco asr-1006

exec_casr-903 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco asr-903

exec_ccgr-2010 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco cgr-2010

exec_ccgs-2520 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco cgs-2520

exec_cgrwic arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco grwic

exec_cie-3000 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco ie-3000

exec_cmc4810 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco mc4810

exec_cnexus arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco nexus

exec_dm1200e arquivo_de_lote.tcl Executa comandos em todos os equipamentos da datacom 1200e

exec_dgs-1510 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da dlink dgs-1510

exec_csf300 arquivo_de_lote.tcl Executa comandos em todos os equipamentos da cisco sf300

exec_teste arquivo_de_lote.tcl Executa comandos em teste para todos os equipamentos da rede

exec_all_cisco arquivo_de_lote.tcl Executa comandos em todos os equipamentos cisco

EOF

;;

# Versão

-V | --version) echo "Versão:$version"

;;
exec_teste) func_exec_teste ;;
exec_c2501) func_exec_cisco_2501 ;;
exec_c2960) func_exec_cisco_2960 ;;
exec_dm1200e) func_exec_datacom_dm1200e ;;
exec_dgs-1510) func_exec_dlink_dgs_1510 ;;
exec_c1120) func_exec_cisco_1120 ;;
exec_c1760) func_exec_cisco_1760 ;;
exec_c1941) func_exec_cisco_1941 ;;
exec_c2511) func_exec_cisco_2511 ;;
exec_c2621) func_exec_cisco_2621 ;;
exec_c2801) func_exec_cisco_2801 ;;
exec_c2811VE) func_exec_cisco_2811VE ;;
exec_c2821) func_exec_cisco_2821 ;;
exec_c2921) func_exec_cisco_2921 ;;
exec_c2924) func_exec_cisco_2924 ;;
exec_c2950) func_exec_cisco_2950 ;;
exec_c3560) func_exec_cisco_3560 ;;
exec_c3662) func_exec_cisco_3662 ;;
exec_c3750) func_exec_cisco_3750 ;;
exec_c3850) func_exec_cisco_3850 ;;
exec_c3945) func_exec_cisco_3945 ;;
exec_c4321) func_exec_cisco_4321 ;;
exec_c4331) func_exec_cisco_4331 ;;
exec_c4503) func_exec_cisco_4503 ;;
exec_c4506) func_exec_cisco_4506 ;;
exec_c4507) func_exec_cisco_4507 ;;
exec_c6509) func_exec_cisco_6509 ;;
exec_c6513) func_exec_cisco_6513 ;;
exec_casr-1002) func_exec_cisco_asr_1002 ;;
exec_casr-1006) func_exec_cisco_asr_1006 ;;
exec_casr-903) func_exec_cisco_asr_903 ;;
exec_ccgr-2010) func_exec_cisco_cgr_2010 ;;
exec_ccgs-2520) func_exec_cisco_cgs_2520 ;;
exec_cgrwic) func_exec_cisco_grwic ;;
exec_cie-3000) func_exec_cisco_ie_3000 ;;
exec_cmc4810) func_exec_cisco_cmc4810 ;;
exec_cnexus) func_exec_cisco_nexus ;;
exec_csf300) func_exec_cisco_sf300 ;;
exec_all_cisco) func_exec_all_cisco ;;

*)

echo "Você precisa passar uma opção válida"

;;

esac




7. Re: Opções e Argumentos [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 23/03/2020 - 23:02h


thiago304 escreveu:

Ola Comunidade,

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

fi

}

case "${1}" in

exec_teste0) func_exec_teste0 ;;
exec_teste1) func_exec_teste1 ;;

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.......


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


8. Re: Opções e Argumentos [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 24/03/2020 - 11:26h

É 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



9. Re: Opções e Argumentos

Tiago Eduardo Zacarias
thiago304

(usa Debian)

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]

Tiago Eduardo Zacarias
thiago304

(usa Debian)

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

Tiago Eduardo Zacarias
thiago304

(usa Debian)

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 $?

elif [[ "$1" == "-V" ]]; then
echo "Versão:$version"
exit $?

elif [[ "$1" == "--version" ]]; then
echo "Versão:$version"
exit $?

elif [[ "$1" == "--exec_teste" ]]; then
func_exec_teste "$2"
exit $?

else
echo "[ E ]: Esse argumento não é válido."
exit 1
fi



12. Codigo no GitHub

Tiago Eduardo Zacarias
thiago304

(usa Debian)

Enviado em 25/03/2020 - 19:44h

Ola Comunidade,

Estou enviando o link para acesso a este codigo que estavamos trabalhando aqui, fiquem a vontade para utilizar se houver interesse .

https://github.com/tiagozacarias/batch_linux


Att,

Tiago Zacarias
LPIC-3
Viva o Linux !!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts