Exemplo de shell script

1. Exemplo de shell script

Clebson
BizuLINUX

(usa CentOS)

Enviado em 01/09/2016 - 22:58h

Boa noite pessoal!

Irei criar um script personalizado para uso interno, porém não tenho muito conhecimento nessa área ainda, preciso de uma base para seguir com as modificações.

O script será executado em servidores com centos, onde serão executados alguns comandos que visam manter os servidores atualizados.

Basicamente seria dessa forma:


Vamos supor que abaixo o script será executado...

# ./script.sh
Deseja executar este script? S/N:

SIM

# COMANDO 1
echo "Atualizando pacotes" OK
yum update

# COMANDO 2
echo "Reparando banco de dados EXIM" [10%] (mostrar progresso dentro dos colchetes e ao final exibir OK na lista) > OK
mysqlcheck --repair eximstats

# COMANDO 3
echo "Scan" [5%] (Nesse caso houve um erro então ele exibide ERROR em vez de OK) > ERROR, em seguida para para o próximo comando ignorando este
clamscan -r

NÃO

echo "Goodbye!"
exit


Como há a opção de SIM OU NÃO, preciso criar alguma função para que eu consiga selecionar também a opção via comando ao executar, por exemplo: # ./script.sh -S ou # ./script.sh -N, é possível isso?

Alguém poderia por gentileza fornecer alguma base com esses requisitos para eu personalizar?

Abraços!


  


2. Re: Exemplo de shell script

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 02/09/2016 - 00:08h

Os parâmetros de linha de comando são entendidos como as variáveis $1, $2, $3 .... Cabe a você escolher oque elas significarão no script, sugiro uma função só para tratá-las

Aqui vão dois exemplos para a animação, se gostar de alguma mas não entender nada, retorne que eu explico como funciona:

Para executar é só dar permissão e ./nome_do_arquivo
#!/bin/bash


function Anime1(){
local i=2
while [[ ! -z $(ps | grep "$!") ]]; do
printf "Processando [ ]" | sed "s/ /\-\>/$i"
printf "\r"
sleep 0.05
((i++))
if [ "$i" == 11 ]; then
for ((i;i>2;i--)); do
printf "Processando [ ]" | sed "s/ /\<\-/$i"
printf "\r"
sleep 0.05
done
fi
done

printf "Processando [---feito---]\n"
}

function Anime2(){

spinner=(\\ \| / -)
while [[ ! -z $(ps | grep "$!") ]]; do
i=0
for ((i;i<4;i++)); do
printf "Processando [${spinner[i]}]"
sleep 0.20
printf "\r"
done
done
printf "Processando [*]\n"
}


sleep 3 & Anime1
sleep 3 & Anime2



Espero ter ajudado

----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


3. Re: Exemplo de shell script

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 02/09/2016 - 00:09h

Bom dia.

Prezado, segue abaixo materiais de estudo para te dar um norte:

https://www.vivaolinux.com.br/artigo/Algoritmos-em-Shell-Script
https://www.youtube.com/watch?v=EOLPUc6oo-w&list=PLucm8g_ezqNrYgjXC8_CgbvHbvI7dDfhs

Comece a desenvolver seu script e nos reporte suas dúvidas.
_________________________
"GNU/Linux for human beings."

ºvº "Software Livre: não é pelo dinheiro.
/( _ ) É uma questão de consciência."
^ ^




4. Re: Exemplo de shell script

Clebson
BizuLINUX

(usa CentOS)

Enviado em 02/09/2016 - 11:01h

ctw6av escreveu:

Os parâmetros de linha de comando são entendidos como as variáveis $1, $2, $3 .... Cabe a você escolher oque elas significarão no script, sugiro uma função só para tratá-las

Aqui vão dois exemplos para a animação, se gostar de alguma mas não entender nada, retorne que eu explico como funciona:

Para executar é só dar permissão e ./nome_do_arquivo
#!/bin/bash


function Anime1(){
local i=2
while [[ ! -z $(ps | grep "$!") ]]; do
printf "Processando [ ]" | sed "s/ /\-\>/$i"
printf "\r"
sleep 0.05
((i++))
if [ "$i" == 11 ]; then
for ((i;i>2;i--)); do
printf "Processando [ ]" | sed "s/ /\<\-/$i"
printf "\r"
sleep 0.05
done
fi
done

printf "Processando [---feito---]\n"
}

function Anime2(){

spinner=(\\ \| / -)
while [[ ! -z $(ps | grep "$!") ]]; do
i=0
for ((i;i<4;i++)); do
printf "Processando [${spinner[i]}]"
sleep 0.20
printf "\r"
done
done
printf "Processando [*]\n"
}


sleep 3 & Anime1
sleep 3 & Anime2



Espero ter ajudado

----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


Bem interessante, gostei da primeira animação.

Me tira algumas dúvidas, eu preciso calcular um tempo aproximado que um comando vai terminar de ser executado para aparecer o "Processando [---feito---]", ou há como calcular automaticamente? Por que tem comandos que demoram horas, e outros que demoram segundos.

Outra dúvida, em qual parte do código exatamente eu insiro os comandos de execução?

É preciso criar uma função separada para cada comando?

E para perguntar se deseja executar o script, usaria isso?

echo -n "Executar script (y/n)? "
read answer
if echo "$answer" | grep -iq "^y" ;then
echo Yes
else
echo No
fi


Obrigado pela ajuda.


5. Re: Exemplo de shell script

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 03/09/2016 - 19:29h

Por exemplo no script abaixo você não necessitara fazer cálculos para saber quando o comando vai acabar para imprimir [---feito---] a função já faz isso por você, cabendo a você somente na função main trocar a palavra [comando]: pelo comando que quer executar. Como um exemplo eu usei o sleep mas pode ser qualquer comando que dê para suprimir a saída dele.

Os comandos podem ser inseridos dentro da função main e se quiser animá-los digite:

comando0  &>/dev/null & Anime1
comando1 [args] &>/dev/null & Anime1
comando2 [args] &>/dev/null & Anime1


Execute o script abaixo após trocar [comando] na função main pelo seu comando

#!/bin/bash

vermelho="\033[1;31m"
verde="\033[1;32m"
rescor="\e[0m"

function Anime1(){
local i=2
while [[ ! -z $(ps | grep "$!") ]]; do
printf "Processando ["$verde" "$rescor"]" | sed "s/ /\-\>/$i"
printf "\r"
sleep 0.05
((i++))
if [ "$i" == 11 ]; then
for ((i;i>2;i--)); do
printf "Processando ["$verde" "$rescor"]" | sed "s/ /\<\-/$i"
printf "\r"
sleep 0.05
done
fi
done

printf "Processando [---"$verde"feito"$rescor"---]\n\n"
}


function Ask(){
clear

printf "Deseja executar este script ["$verde"S"$rescor"/"$vermelho"n"$rescor"]: " && read -n1 resp

case $resp in
s|S) printf '\bExecutando...\n\n';;
n|N) printf '\bSaindo...\n\n' && exit 0;;
*) clear && ask
esac
}

function main(){
Ask
[comando] &>/dev/null & Anime1
}

main



----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts