Função dentro de outra função

1. Função dentro de outra função

Lucas Peregrino
Lucas Peregrino

(usa Debian)

Enviado em 18/04/2021 - 19:37h

Boa noite estou tentando chamar a função dentro de outra função

verifica)

if [ "$VERIFICA" = "teste.com" ] ; then
echo "Servidor Oline"
echo "No dia $DATA, as $HORA => O servidor estava ligado" >> /var/log/TP/tpross_online.log

else

echo "Servidor Desligado"
echo "No dia $DATA, as $HORA => O servidor estava desligado" >> /var/log/TP/tpross_offline.log
/etc/programas/TP/build.sh start
fi
;;
turbo)
if [[ -z $(which rdmsr) ]]; then
echo "msr-tools is not installed. Run 'sudo apt install msr-tools' to install it." >&2
echo 'echo msr >> /etc/modules'
exit 1
fi

if [[ ! -z $1 && $1 != "enable" && $1 != "disable" ]]; then
echo "Invalid argument: $1" >&2
echo ""
echo "Usage: $(basename $0) [disable|enable]"
exit 1
fi

cores=$(cat /proc/cpuinfo | grep processor | awk '{print $3}')
for core in $cores; do
if [[ $1 == "disable" ]]; then
wrmsr -p${core} 0x1a0 0x4000850089
fi
if [[ $1 == "enable" ]]; then
modprobe msr
wrmsr -p${core} 0x1a0 0x850089
fi
state=$(rdmsr -p${core} 0x1a0 -f 38:38)
if [[ $state -eq 1 ]]; then
echo "core ${core}: disabled"
else
echo "core ${core}: enabled"
fi
done
;;

Na hora chamo comando ./comando turbo ele aparece a mensagem de enable e desable ai tento fazer o seguinte ./comando turbo enable mas não aceita alguém pode me da uma mão


  


2. Re: Função dentro de outra função

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/04/2021 - 19:51h

Ssria legal vc usar um teste de case ao invés de ifs.

Não vi vc dando nenhum shift dos argumentos.

if [[ ! -z $1 && $1 != "enable" && $1 != "disable" ]]; 


Nao eh $2 ali?


3. Re: Função dentro de outra função

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/04/2021 - 00:36h


Lucas Peregrino escreveu:

Boa noite estou tentando chamar a função dentro de outra função

verifica)

if [ "$VERIFICA" = "teste.com" ] ; then
echo "Servidor Oline"
echo "No dia $DATA, as $HORA => O servidor estava minerado" >> /var/log/TP/tpross_online.log

else

echo "Servidor Desligado"
echo "No dia $DATA, as $HORA => O servidor estava desligado" >> /var/log/TP/tpross_offline.log
/etc/programas/TP/build.sh start
fi
;;
turbo)
if [[ -z $(which rdmsr) ]]; then
echo "msr-tools is not installed. Run 'sudo apt install msr-tools' to install it." >&2
echo 'echo msr >> /etc/modules'
exit 1
fi

if [[ ! -z $1 && $1 != "enable" && $1 != "disable" ]]; then
echo "Invalid argument: $1" >&2
echo ""
echo "Usage: $(basename $0) [disable|enable]"
exit 1
fi

cores=$(cat /proc/cpuinfo | grep processor | awk '{print $3}')
for core in $cores; do
if [[ $1 == "disable" ]]; then
wrmsr -p${core} 0x1a0 0x4000850089
fi
if [[ $1 == "enable" ]]; then
modprobe msr
wrmsr -p${core} 0x1a0 0x850089
fi
state=$(rdmsr -p${core} 0x1a0 -f 38:38)
if [[ $state -eq 1 ]]; then
echo "core ${core}: disabled"
else
echo "core ${core}: enabled"
fi
done
;;

Na hora chamo comando ./comando turbo ele aparece a mensagem de enable e desable ai tento fazer o seguinte ./comando turbo enable mas não aceita alguém pode me da uma mão

Boa noite Lucas Peregrino,
Passa o script inteiro, somente essa parte fica difícil de entender....

No aguardo,
Marcelo Oliver
______________________________________________________________________




4. Re: Função dentro de outra função

Lucas Peregrino
Lucas Peregrino

(usa Debian)

Enviado em 19/04/2021 - 11:51h

#!/bin/bash

### BEGIN INIT INFO
# Provides: mv.sh
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin

. /lib/lsb/init-functions

DATA=$(date +%d-%m-%Y)
HORA=$(date +%H:%M)

mkdir -p /var/log/TP/
touch /var/log/TP/tpross_online.log
touch /var/log/TP/tpross_offline.log

VERIFICA=$(ps aux | grep tpross | sed -n "1p" | cut -b96-121)

sysctl -w vm.nr_hugepages=$(nproc)

for i in $(find /sys/devices/system/node/node* -maxdepth 0 -type d);
do
echo 3 > "$i/hugepages/hugepages-1048576kB/nr_hugepages";
done

echo "1GB pages successfully enabled"

case "$1" in
verifica)

if [ "$VERIFICA" = "teste.com" ] ; then
echo "Servidor Oline"
echo "No dia $DATA, as $HORA => O servidor estava ligado" >> /var/log/TP/tpross_online.log

else

echo "Servidor Desligado"
echo "No dia $DATA, as $HORA => O servidor estava desligado" >> /var/log/TP/tpross_offline.log
/etc/programas/TP/build.sh start
fi
;;
turbo)
if [[ -z $(which rdmsr) ]]; then
echo "msr-tools is not installed. Run 'sudo apt install msr-tools' to install it." >&2
echo 'echo msr >> /etc/modules'
exit 1
fi

if [[ ! -z $1 && $1 != "enable" && $1 != "disable" ]]; then
echo "Invalid argument: $1" >&2
echo ""
echo "Usage: $(basename $0) [disable|enable]"
exit 1
fi

cores=$(cat /proc/cpuinfo | grep processor | awk '{print $3}')
for core in $cores; do
if [[ $1 == "disable" ]]; then
wrmsr -p${core} 0x1a0 0x4000850089
fi
if [[ $1 == "enable" ]]; then
modprobe msr
wrmsr -p${core} 0x1a0 0x850089
fi
state=$(rdmsr -p${core} 0x1a0 -f 38:38)
if [[ $state -eq 1 ]]; then
echo "core ${core}: disabled"
else
echo "core ${core}: enabled"
fi
done
;;
*)
echo "Usage: /etc/init.d/build.sh {verifica|turbo}"
exit 1
;;
esac

exit 0



5. Re: Função dentro de outra função

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/04/2021 - 18:49h

Função dentro de outra função
Não encontrei "funções" no seu script....
----------------------------------------------------------------------------------------------------------------
Na hora chamo comando ./comando turbo ele aparece a mensagem de enable e desable ai tento fazer o seguinte ./comando turbo enable mas não aceita alguém pode me da uma mão

Se, no "modo" turbo quer as opções:
"(en|dis)able" = (enable|disable)
Deve chamar o script com dois parâmetros:
script.sh turbo (enable|disable)
Dá forma que está, o argumento 2 não é tratado.....
Em tempo:
'enable' é um comando do bash.

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



6. Re: Função dentro de outra função

Lucas Peregrino
Lucas Peregrino

(usa Debian)

Enviado em 19/04/2021 - 21:48h

Teria como eu chama o enable ou terei que deixa ele num outro script a parte.



7. Re: Função dentro de outra função

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/04/2021 - 00:34h

Lucas Peregrino escreveu:

Teria como eu chama o enable ou terei que deixa ele num outro script a parte.


Não recomendo usar o nesmo no do comando, use,
_enable
Sim, é possivel passar o "_enable" como parâmetro,
Veja a analise de parâmetros:
#!/bin/bash
lin='«-------------- --------------»';

function uso(){
printf "Uso:\n";
printf " %s\n" ''$0' '{"verifica","turbo _enable","turbo _disable"}
exit;
}

case "$1" in
verifica) printf "Em %(%F as %X)T - \$1:$1\n" ;;
turbo) printf "Em %(%F as %X)T - \$1:$1\n";
[[ "$2" =~ ^(_en|_dis)able$ ]] && echo "Parâmetro \$2 Válido - \$2:$2" || echo "Not Okay";
case "$2" in
_enable) printf "Em %(%F as %X)T - \$1:$1 \$2:$2\n";;
_disable) printf "Em %(%F as %X)T - \$1:$1 \$2:$2\n";;
*) uso ;;
esac
;;
*) uso;;
esac

##########################################################################
Com "Functions"

#!/usr/bin/env bash

msg='»» Coloque os comandos referentes a esta função ««';

lin(){ [ $1 ] && sz=$1 || sz=30;printf "%${sz}s"|sed 's/ /─/g;';}

function uso(){
printf " $(lin 35)\n Uso:\n";
printf " %s\n" ''$0' '{"verifica","turbo _enable","turbo _disable"}
printf " $(lin 35)\n"
exit;
}

function verifica(){
printf "%(%F as %X)T\n";
echo -e "$lin\nFunção: ${FUNCNAME[0]}\n$lin\n$(lin 48)\n${msg}\n$(lin 48)"
}

function turbo(){
printf "%(%F as %X)T\n";
echo -e "$(lin 40)\nFunção: ${FUNCNAME[0]}\n$(lin 40)\n"
case "$1" in
_enable) printf "\n${msg} param: » $1 «\n";;
_disable) printf "\n${msg} param: » $1 «\n";;
*) uso ;;
esac
}

echo -e "\n$(lin 50)\nChama a função conforme o parâmetro \$1 » $1 «\n$(lin 50)\n"
case $1 in
verifica) $1 ;;
turbo) [[ "$2" =~ ^(_en|_dis)able$ ]] && $1 $2 || uso ;;
*) uso ;;
esac

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.