Por favor, me ajudem com esse problema" [RESOLVIDO]

1. Por favor, me ajudem com esse problema" [RESOLVIDO]

Raul Santos Defaveri
Raulsd

(usa Ubuntu)

Enviado em 27/05/2017 - 20:24h

Sou iniciante no linux e mais novo ainda em shell script.
Estou tentando fazer um script que pega o valor total da cpu no momento e se ele for maior que 70%, ele executa um comando, se não for ele te da a opção de executar esse comando ou não.

meu problema e com essa comparação da % usada da cpu com os 70%, eu não faço ideia de como fazer isso e to amarrado nessa parte à algum tempo.


clear
opcoes() {
echo "deu certo"
}

variavel=$(ps aux|sed '1d'|awk '{TT+=$3}END{print TT}')

if [ $variavel -ge "70" ]; then
opcoes
else
echo "Desenja entrar no menu de gerenciamento: s/n?"
read entrar
if [ "$entrar" = "s" ]; then
opcoes
else
if [ "$entrar" = "n" ]; then
echo "Saindo..."
sleep 1
exit 0
else
echo "Error: Opção invalida"
fi
fi
fi



não é nada de outro mundo creio eu, mas isso ta quebrando minha cabeça no momento


  


2. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/05/2017 - 20:40h

Dei uma ajeitada momentânea no seu código sem testá-lo. Como você pretende ler as porcentagens da CPU caso exista mais de um core no processador? Você pretende usar informações de algo como /proc/stat ?

Veja que existe dentro do IF uma opção chamada ELIF, que é a combinação entre um ELSE e um IF. Não existe semelhante em C, mas sim em PERL e Python.

clear

opcoes() {
echo "deu certo"
}

variavel=$(ps aux | sed '1d' | awk '{TT+=$3} END {print TT}')

if [ $variavel -ge 70 ]; then
opcoes
else
read -p "Deseja entrar no menu de gerenciamento: s/n?" entrar
if [ "$entrar" = "s" ]
then
opcoes
elif [ "$entrar" = "n" ]; then
echo "Saindo..."
sleep 1
exit 0
else
echo "Error: Opção invalida"
fi
fi


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Raul Santos Defaveri
Raulsd

(usa Ubuntu)

Enviado em 27/05/2017 - 20:56h

listeiro_037 escreveu:

Dei uma ajeitada momentânea no seu código sem testá-lo. Como você pretende ler as porcentagens da CPU caso exista mais de um core no processador? Você pretende usar informações de algo como /proc/stat ?

Veja que existe dentro do IF uma opção chamada ELIF, que é a combinação entre um ELSE e um IF. Não existe semelhante em C, mas sim em PERL e Python.

clear

opcoes() {
echo "deu certo"
}

variavel=$(ps aux | sed '1d' | awk '{TT+=$3} END {print TT}')

if [ $variavel -ge 70 ]; then
opcoes
else
read -p "Deseja entrar no menu de gerenciamento: s/n?" entrar
if [ "$entrar" = "s" ]
then
opcoes
elif [ "$entrar" = "n" ]; then
echo "Saindo..."
sleep 1
exit 0
else
echo "Error: Opção invalida"
fi
fi


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


o pior e que não sei te responder isso pq o pc que eu to usando so tem 1 core (pc da faculdade) então nem pensei nisso, ja que é aqui que eu ia rodar ele, talvez o comando funcione em um pc com mais core por processador, mas não tem como eu testar agora.

e sobre o elif, ja programei tanto em C que as vezes nem lembro dele


4. Re: Por favor, me ajudem com esse problema

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/05/2017 - 21:15h

Então, esqueci-me de citar que o IF testando opção -ge não funciona com "70" porque este é string, mas com 70 porque é um número. Em PERL é o contrário: ge funciona só com string.

Estive pesquisando e parece-me que as informações sobre cpu e cores está em /proc/stat mas ainda não dou 100% de certeza.

Aqui estou usando um 4 cores e (apenas parte do) /proc/stat deu isto:

cpu  1215787 10079 236688 16692568 151020 48 1328 0 0 0
cpu0 330337 2417 65451 15299623 148162 48 1151 0 0 0
cpu1 319848 2620 71682 462232 1368 0 154 0 0 0
cpu2 280172 2355 49462 465051 859 0 14 0 0 0
cpu3 285429 2686 50093 465661 631 0 8 0 0 0


Cheguei a esta informação através daqui https://stackoverflow.com/questions/23367857/accurate-calculation-of-cpu-usage-given-in-percentage-i... e lá eles dão o endereço da documentação https://www.kernel.org/doc/Documentation/filesystems/proc.txt

Lá no primeiro link eles mostram o que cada informação significa, mas falta entender o que calcular para chegar na porcentagem.

     user    nice   system  idle      iowait irq   softirq  steal  guest  guest_nice
cpu 74608 2520 24433 1117073 6176 4054 0 0 0 0


Conky pode apresentar informações sobre CPU. Deve acessar as informações em /proc. Falta encontrá-las. Talvez deva ter alguma solução pronta na internet.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/05/2017 - 22:27h

Raulsd escreveu:

Sou iniciante no linux e mais novo ainda em shell script.
Estou tentando fazer um script que pega o valor total da cpu no momento e se ele for maior que 70%, ele executa um comando, se não for ele te da a opção de executar esse comando ou não.

meu problema e com essa comparação da % usada da cpu com os 70%, eu não faço ideia de como fazer isso e to amarrado nessa parte à algum tempo.


clear
opcoes() {
echo "deu certo"

}

variavel=$(ps aux|sed '1d'|awk '{TT+=$3}END{print TT}')

if [ $variavel -ge "70" ]; then
opcoes
else
echo "Desenja entrar no menu de gerenciamento: s/n?"
read entrar
if [ "$entrar" = "s" ]; then
opcoes
else
if [ "$entrar" = "n" ]; then
echo "Saindo..."
sleep 1
exit 0
else
echo "Error: Opção invalida"
fi
fi
fi



não é nada de outro mundo creio eu, mas isso ta quebrando minha cabeça no momento


Boa noite.
o teste
[ $var -ge 70 ] ...
Só funciona com número inteiro.
att.
mso


6. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Raul Santos Defaveri
Raulsd

(usa Ubuntu)

Enviado em 27/05/2017 - 23:00h

msoliver escreveu:

Raulsd escreveu:

Sou iniciante no linux e mais novo ainda em shell script.
Estou tentando fazer um script que pega o valor total da cpu no momento e se ele for maior que 70%, ele executa um comando, se não for ele te da a opção de executar esse comando ou não.

meu problema e com essa comparação da % usada da cpu com os 70%, eu não faço ideia de como fazer isso e to amarrado nessa parte à algum tempo.


clear
opcoes() {
echo "deu certo"

}

variavel=$(ps aux|sed '1d'|awk '{TT+=$3}END{print TT}')

if [ $variavel -ge "70" ]; then
opcoes
else
echo "Desenja entrar no menu de gerenciamento: s/n?"
read entrar
if [ "$entrar" = "s" ]; then
opcoes
else
if [ "$entrar" = "n" ]; then
echo "Saindo..."
sleep 1
exit 0
else
echo "Error: Opção invalida"
fi
fi
fi



não é nada de outro mundo creio eu, mas isso ta quebrando minha cabeça no momento


Boa noite.
o teste
[ $var -ge 70 ] ...
Só funciona com número inteiro.
att.
mso


esse e o problema, a saida da variavel var seria um numero real como 40.2, meu problema agora é como comparar 40.2 com 70 assim entrar no if



7. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/05/2017 - 01:16h

Raulsd escreveu:

msoliver escreveu:

Raulsd escreveu:

Sou iniciante no linux e mais novo ainda em shell script.
Estou tentando fazer um script que pega o valor total da cpu no momento e se ele for maior que 70%, ele executa um comando, se não for ele te da a opção de executar esse comando ou não.

meu problema e com essa comparação da % usada da cpu com os 70%, eu não faço ideia de como fazer isso e to amarrado nessa parte à algum tempo.



clear
opcoes() {
echo "deu certo"

}

variavel=$(ps aux|sed '1d'|awk '{TT+=$3}END{print TT}')

if [ $variavel -ge "70" ]; then
opcoes
else
echo "Desenja entrar no menu de gerenciamento: s/n?"
read entrar
if [ "$entrar" = "s" ]; then
opcoes
else
if [ "$entrar" = "n" ]; then
echo "Saindo..."
sleep 1
exit 0
else
echo "Error: Opção invalida"
fi
fi
fi



não é nada de outro mundo creio eu, mas isso ta quebrando minha cabeça no momento


Boa noite.
o teste
[ $var -ge 70 ] ...
Só funciona com número inteiro.
att.
mso


esse e o problema, a saida da variavel var seria um numero real como 40.2, meu problema agora é como comparar 40.2 com 70 assim entrar no if


Use o bc ou o awk.
Att.
mso



8. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/05/2017 - 01:20h

BC é uma calculadora e há um jeito de usá-la bem chatinho.

Encontrei algo no VOL: https://www.vivaolinux.com.br/artigo/BC-A-sua-calculadora-programavel-no-Linux?pagina=8

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/05/2017 - 23:41h

Raulsd escreveu:
esse e o problema, a saida da variavel var seria um numero real como 40.2, meu problema agora é como comparar 40.2 com 70 assim entrar no if


Segue:
#!/bin/bash
clear
opcoes() {
echo "deu certo"
}

variavel=$(ps aux|sed '1d'|awk '{TT+=$3}END{print TT}')
STTUS=$(bc <<< "$variavel >= 70") #RETORNA 0 OU 1
if (($STTUS > 0)); then
opcoes
else
echo -n "Deseja entrar no menu de gerenciamento: s/n? "
read entrar
case $entrar in
[Ss]) opcoes ;;
[Nn]) echo "Saindo..."; sleep 1; exit 0 ;;
*) echo "Error: Opção invalida" ;exit 0 ;;
fi


Att.:
Marcelo Oliver




10. Re: Por favor, me ajudem com esse problema" [RESOLVIDO]

Raul Santos Defaveri
Raulsd

(usa Ubuntu)

Enviado em 29/05/2017 - 17:08h

msoliver escreveu:

Raulsd escreveu:
esse e o problema, a saida da variavel var seria um numero real como 40.2, meu problema agora é como comparar 40.2 com 70 assim entrar no if


Segue:
#!/bin/bash
clear
opcoes() {
echo "deu certo"
}

variavel=$(ps aux|sed '1d'|awk '{TT+=$3}END{print TT}')
STTUS=$(bc <<< "$variavel >= 70") #RETORNA 0 OU 1
if (($STTUS > 0)); then
opcoes
else
echo -n "Deseja entrar no menu de gerenciamento: s/n? "
read entrar
case $entrar in
[Ss]) opcoes ;;
[Nn]) echo "Saindo..."; sleep 1; exit 0 ;;
*) echo "Error: Opção invalida" ;exit 0 ;;
fi


Att.:
Marcelo Oliver



muito obrigado cara, vc me tirou de uma travada que ja durava uns 2 dias.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts