Usando variáveis pra selecionar linha de comando em script

1. Usando variáveis pra selecionar linha de comando em script

Flavio Figueiredo
flaviolf

(usa Outra)

Enviado em 27/11/2019 - 09:56h

Bom dia, estou utilizando zabbix para captura de dados e estou tendo um problema em relação a essa captura pois preciso usar variáveis para o mesmo

#!/bin/bash

IP=$1

snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800.....// | grep -E '^340[789]' | cut -c 10-11 | wc -l

snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^346[0123]' | cut -c 10-11 | wc -l

snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800..... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^351[234]' | cut -c 10-11 | wc -l

Gostaria de saber como posso fazer para que cada comando snmpbulkwalk ser reconhecido como uma variável, pois tenho que repeti-lo muitas vezes, ou então pelo menos desse ponto em diante (| grep -E '^340[789]' | cut -c 10-11 | wc -l) pois o comando antes é igual para todos.

Desde já Obrigado




  


2. Re: Usando variáveis pra selecionar linha de comando em script

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 27/11/2019 - 11:09h

Variável:
COMANDO=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800.....//) 

Uso:
grep -E '^340[789]' | cut -c 10-11 | wc -l <<< $COMANDO 


EDIT:
Agora que percebi que essa minha dica de USO não tem nada a ver... kkkkkk
Desconsidere!!!!

Tenta assim: echo "$COMANDO" | grep -E '^340[789]' | cut -c 10-11 | wc -l


3. Re: Usando variáveis pra selecionar linha de comando em script

Flavio Figueiredo
flaviolf

(usa Outra)

Enviado em 27/11/2019 - 14:17h

Ryuk escreveu:

Variável:
COMANDO=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800.....//) 

Uso:
grep -E '^340[789]' | cut -c 10-11 | wc -l <<< $COMANDO 


Criei o script dessa forma

IP=$1

2=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800......//")

3=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800........ | sed "s/.1.3.6.1.4.1.5875.800.......//")

4=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800.........//")


| grep -E '^340[789]' | cut -c 10-11 | wc -l <<< $2

| grep -E '^346[0123]' | cut -c 10-11 | wc -l <<< $3

| grep -E '^351[234]' | cut -c 10-11 | wc -l <<< $4

Quando eu chamo o script ele ta me dando o erro
./111.sh 10.10.10.10 2
./111.sh: line 5: 2=34078976: comando não encontrado
./111.sh: line 7: 3=34078976: comando não encontrado
./111.sh: line 9: 4=34078976: comando não encontrado
./111.sh: line 12: 2: comando não encontrado
0
0

O resultado esperado devia ser
34078976 1
34079232 0
34079488 1
34079744 1
34080000 1
34080256 1
34080512 1
34080768 1
34081024 1
34081280 1
34081536 1

Ai o grep cortaria o começo ali e o wc contabilizaria a quantidade...
Outro detalhe é que queria aproveitar o script pra ele chamar só uma linha especifica por execução, ou seja
./111.sh 10.10.10.10 2
./111.sh 10.10.10.10 3
./111.sh 10.10.10.10 4





4. Re: Usando variáveis pra selecionar linha de comando em script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/11/2019 - 15:40h


flaviolf escreveu:

Bom dia, estou utilizando zabbix para captura de dados e estou tendo um problema em relação a essa captura pois preciso usar variáveis para o mesmo

#!/bin/bash

IP=$1

snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800.....// | grep -E '^340[789]' | cut -c 10-11 | wc -l

snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^346[0123]' | cut -c 10-11 | wc -l

snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800..... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^351[234]' | cut -c 10-11 | wc -l

Gostaria de saber como posso fazer para que cada comando snmpbulkwalk ser reconhecido como uma variável, pois tenho que repeti-lo muitas vezes, ou então pelo menos desse ponto em diante (| grep -E '^340[789]' | cut -c 10-11 | wc -l) pois o comando antes é igual para todos.

Desde já Obrigado


Boa tarde Flavio.
Tendo em vista que o comando "snmpbulkwalk" é sempre igual ....
Execute-o somente uma vez, salve o resultado em um arquivo e aplique o filtro, "grep", que também pode ser reduzido.
#!/bin/bash
IP=$1;
snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800......//" > snmpbulkwalk.txt
grep -E '^(340[789]|346[0123]|351[234])' snmpbulkwalk.txt|cut -c 10-11 | wc -l

Obs.: Se o OBJETIVO é "contar" as linhas que foram "CASADAS" com o grep,
qual a necessidade do comando "cut -c 10-11"?
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


5. Re: Usando variáveis pra selecionar linha de comando em script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/11/2019 - 16:35h

flaviolf escreveu:

Ryuk escreveu:

Variável:
COMANDO=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800.....//) 

Uso:
grep -E '^340[789]' | cut -c 10-11 | wc -l <<< $COMANDO   ERRADO!   

Criei o script dessa forma

IP=$1

2=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800......//")

3=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800........ | sed "s/.1.3.6.1.4.1.5875.800.......//")

4=$(snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800.........//")


| grep -E '^340[789]' | cut -c 10-11 | wc -l <<< $2

| grep -E '^346[0123]' | cut -c 10-11 | wc -l <<< $3

| grep -E '^351[234]' | cut -c 10-11 | wc -l <<< $4

Quando eu chamo o script ele ta me dando o erro
./111.sh 10.10.10.10 2
./111.sh: line 5: 2=34078976: comando não encontrado
./111.sh: line 7: 3=34078976: comando não encontrado
./111.sh: line 9: 4=34078976: comando não encontrado
./111.sh: line 12: 2: comando não encontrado
0
0

O resultado esperado devia ser
34078976 1
34079232 0
34079488 1
34079744 1
34080000 1
34080256 1
34080512 1
34080768 1
34081024 1
34081280 1
34081536 1

Ai o grep cortaria o começo ali e o wc contabilizaria a quantidade...
Outro detalhe é que queria aproveitar o script pra ele chamar só uma linha especifica por execução, ou seja
./111.sh 10.10.10.10 2
./111.sh 10.10.10.10 3
./111.sh 10.10.10.10 4

Flavio, tem muita "coisa" ERRADA!.
1º - Cria 3 variáveis com o mesmo conteúdo!
2º -
| grep -E '^340[789]' | cut -c 10-11 | wc -l <<< $2 

Essa sintaxe ta 'esdruxula', "PIPE" grep "PIPE" cut "PIPE" wc -l ....
O grep tem que "filtrar" do "COMANDO"
Além do nome da var iniciar com número . . .
Nunca terá o resultado esperado, pois, o cut "pega" somente o decimo e o decimo primeiro caractere!!!!!
Poste algumas linha do comando:
snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800......
E "negrite" o que você quer na saída.....
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


6. Re: Usando variáveis pra selecionar linha de comando em script

Flavio Figueiredo
flaviolf

(usa Outra)

Enviado em 27/11/2019 - 17:36h

Então igual disse anteriormente, criei o script, mas preciso que uma linha seja feita de cada vez ao executa-lo, que ele busque um comando por vez conforme eu pedir com variavel (criei como número mas não necessariamente precisar ser um), ou algum comando que chame uma linha por vez. Se não eu tenho que criar uns 200 scripts diferentes dentro da pasta. No caso a primeira variavel chamaria o ip, e a segunda, terceira, quarta.... e assim adiante chamaria a linha especifica então eu usaria o ip e a variavel correspondente aquela linha de comando que preciso

IP=$1

2ª snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800.....// | grep -E '^340[789]' | cut -c 10-11 | wc -l
ou
3ª snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^346[0123]' | cut -c 10-11 | wc -l
ou
4ª snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800..... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^351[234]' | cut -c 10-11 | wc -l

No caso do cut -c 10-11 eu preciso filtrar os números da primeira coluna que o comando me retorna, porem a unica coisa que me interessa dela é o numero na frente que vão ser 0,1,2

Desculpem a ignorância, não entendo muito de variaveis no linux, e foi dessa forma que consegui fazer ele me trazer o primeiro resultado, agora preciso filtrar esses, pois cada setor separado pelo | grep -E '^*[*]' me retornaria um número diferentes de objetos contidos no mesmo.

No zabbix ele chama o script da seguinte maneira

111.sh[10.10.10.10,variavel da linha correspondente]


7. Re: Usando variáveis pra selecionar linha de comando em script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/11/2019 - 18:02h


flaviolf escreveu:

Então igual disse anteriormente, criei o script, mas preciso que uma linha seja feita de cada vez ao executa-lo, que ele busque um comando por vez conforme eu pedir com variavel (criei como número mas não necessariamente precisar ser um), ou algum comando que chame uma linha por vez. Se não eu tenho que criar uns 200 scripts diferentes dentro da pasta. No caso a primeira variavel chamaria o ip, e a segunda, terceira, quarta.... e assim adiante chamaria a linha especifica então eu usaria o ip e a variavel correspondente aquela linha de comando que preciso

IP=$1

2ª snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800.....// | grep -E '^340[789]' | cut -c 10-11 | wc -l
ou
3ª snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800...... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^346[0123]' | cut -c 10-11 | wc -l
ou
4ª snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800..... | sed "s/.1.3.6.1.4.1.5875.800......//" | grep -E '^351[234]' | cut -c 10-11 | wc -l

No caso do cut -c 10-11 eu preciso filtrar os números da primeira coluna que o comando me retorna, porem a unica coisa que me interessa dela é o numero na frente que vão ser 0,1,2

Desculpem a ignorância, não entendo muito de variaveis no linux, e foi dessa forma que consegui fazer ele me trazer o primeiro resultado, agora preciso filtrar esses, pois cada setor separado pelo | grep -E '^*[*]' me retornaria um número diferentes de objetos contidos no mesmo.

No zabbix ele chama o script da seguinte maneira

111.sh[10.10.10.10,variavel da linha correspondente]

Flavio,
Poste algumas linhas da saída do comando
snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800....
Só preciso dessa informação para concluir o script que
estou fazendo para você.


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


8. Re: Usando variáveis pra selecionar linha de comando em script

Flavio Figueiredo
flaviolf

(usa Outra)

Enviado em 28/11/2019 - 08:28h

34078976 1
34079232 0
34079488 1
34079744 1
34080000 1
34080256 1
34080512 1
34080768 1
34081024 1
34081280 1
34081536 1
34603264 1
34603520 1
34603776 1
34604032 1
34604288 1
34604544 1
34604800 1
34605056 1
34605312 1
34605568 1
34605824 1
34606080 1
34606336 1
34606592 1
34606848 1
34607104 1
34607360 1
34607616 1
34607872 1
34608128 2
34608384 1
34608640 2
...
170918912 1
170919168 1
170919424 1
170919680 1


Usando grep cut e wc, que no caso ta selecionando um numero especifico dessas linhas
11





9. Re: Usando variáveis pra selecionar linha de comando em script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/11/2019 - 17:12h

flaviolf escreveu:
34078976 1
34079232 0
34079488 1
34079744 1
34080000 1
34080256 1
34080512 1
34080768 1
34081024 1
34081280 1
34081536 1
...
Usando grep cut e wc, que no caso ta selecionando um numero especifico dessas linhas
11

Boa tarde Flavio,
Segue o SCRIPT!
O IP e o que deseja "casar", devem ser passados como PARÂMETRO,
Se não passar, da ERRO!

#!/bin/bash
clear;

line() { echo -e $_{1..48}'\b—' ;}

inic(){
if (($#==2));then
IP="$1"; regex=$2;
printf "$(line)\n Parâmetros Recebidos:\n IP: $IP - RegEx: $regex\n" #TESTES!!!#
snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800......//" >> snmpbulkwalk.txt
wait;
##COMENTE O QUE NÃO QUER VER NA SAÍDA!##
printf "$(line)\nLINHAS \"CASADAS\":\n"
grep -E "^${regex}" snmpbulkwalk.txt
printf "$(line)\nCAMPO APÓS o \"CASADO\":\n"
awk '/^'${regex}'/ {print $2}' snmpbulkwalk.txt
printf "$(line)\nNº de Linhas \"CASADAS\":\n"
grep -Ec "^${regex}" snmpbulkwalk.txt
else
printf "$(line)\n\e[31;1mInforme os Parâmetros!\e[m\n\
$(line)\n\e[32;1mExemplos de Uso:\e[m\n$0 IP RegEx\n\
$0 10.10.10.10 \"(340[01]|346[2-6])\"\n\
$0 10.10.10.10 123[456]\n$(line)\n";
exit;
fi
}

inic "$@"
#_________________________________FIM_______________________________#

OBS: Se resolvido, Não esqueça de marcar o Tópico como RESOLVIDO,
E escolher a MELHOR RESPOSTA..... :)

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


10. Re: Usando variáveis pra selecionar linha de comando em script

Flavio Figueiredo
flaviolf

(usa Outra)

Enviado em 29/11/2019 - 13:27h

msoliver escreveu:

flaviolf escreveu:
34078976 1
34079232 0
34079488 1
34079744 1
34080000 1
34080256 1
34080512 1
34080768 1
34081024 1
34081280 1
34081536 1
...
Usando grep cut e wc, que no caso ta selecionando um numero especifico dessas linhas
11

Boa tarde Flavio,
Segue o SCRIPT!
O IP e o que deseja "casar", devem ser passados como PARÂMETRO,
Se não passar, da ERRO!

#!/bin/bash
clear;

line() { echo -e $_{1..48}'\b—' ;}

inic(){
if (($#==2));then
IP="$1"; regex=$2;
printf "$(line)\n Parâmetros Recebidos:\n IP: $IP - RegEx: $regex\n" #TESTES!!!#
snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... | sed "s/.1.3.6.1.4.1.5875.800......//" >> snmpbulkwalk.txt
wait;
##COMENTE O QUE NÃO QUER VER NA SAÍDA!##
printf "$(line)\nLINHAS \"CASADAS\":\n"
grep -E "^${regex}" snmpbulkwalk.txt
printf "$(line)\nCAMPO APÓS o \"CASADO\":\n"
awk '/^'${regex}'/ {print $2}' snmpbulkwalk.txt
printf "$(line)\nNº de Linhas \"CASADAS\":\n"
grep -Ec "^${regex}" snmpbulkwalk.txt
else
printf "$(line)\n\e[31;1mInforme os Parâmetros!\e[m\n\
$(line)\n\e[32;1mExemplos de Uso:\e[m\n$0 IP RegEx\n\
$0 10.10.10.10 \"(340[01]|346[2-6])\"\n\
$0 10.10.10.10 123[456]\n$(line)\n";
exit;
fi
}

inic "$@"
#_________________________________FIM_______________________________#

OBS: Se resolvido, Não esqueça de marcar o Tópico como RESOLVIDO,
E escolher a MELHOR RESPOSTA..... :)

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


Obrigado pela ajuda Marcelo
Porem não retornou o resultado esperado, para essa linha de comando especifico, analisei o comando aqui e não consegui encontrar que poderia estar errado, o comando foi jogado corretamente em snmpbulkwalk.txt

Parâmetros Recebidos:
IP: 10.10.10.1 - RegEx: 340[789]
————————————————————————————————————————————————
LINHAS "CASADAS":
————————————————————————————————————————————————
CAMPO APÓS o "CASADO":
————————————————————————————————————————————————
Nº de Linhas "CASADAS":
0
Vi que você jogou o resultado do comando em um arquivo, como estou utilizando o zabbix e são várias consultas por vez, acho que poderia gerar conflito, mas só conseguiria ter certeza testando na prática mesmo.




11. Re: Usando variáveis pra selecionar linha de comando em script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/11/2019 - 17:11h

Boa tarde Flavio.
Poste algumas linhas do COMANDO:
snmpbulkwalk -Osqn -c teste -v2c $IP 1.3.6.1.4.1.5875.800.... 

Sem filtrar NADA....

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


12. Re: Usando variáveis pra selecionar linha de comando em script

Flavio Figueiredo
flaviolf

(usa Outra)

Enviado em 03/12/2019 - 15:50h

.1.3.6.1.4.1.5875.800.3.10.1.1.11.34078976 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34079232 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34079488 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34079744 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34080000 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34080256 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34080512 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34080768 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34081024 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34081280 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34081536 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34081792 1
.1.3.6.1.4.1.5875.800.3.10.1.1.11.34603264 1




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts