Script CBQ - Shell Script [RESOLVIDO]

1. Script CBQ - Shell Script [RESOLVIDO]

Grégory H. Ebertz
gregorye

(usa Debian)

Enviado em 23/09/2010 - 17:32h

Boa Tarde galera, tenho o script abaixo para controle de banda que ele pega uma listagem de usuários e gera a tabela do SHAPER para cada usuário, porem como podem notar para cada usuário tenho que destinar um numero para gerar no cbq. Quero que esse numero fique automaticamente ex: 0001, 0002, 0003, sem eu ter que colocar para cada usuário, tentei várias formas mas não consegui!



Segue lista dos clientes:
/etc/provedor/clientes_cbq

0010|usuario1|172.16.1.101|400|256|5|A
0011|usuario2|172.16.1.102|128|64|5|A


O script que le isso:

#!/bin/bash
# script criado por Tiago Andre Geraldi - virgulla@gmail.com

rm -f /etc/shaper/*

LISTA=`cat /etc/provedor/clientes_cbq`
for CLIENTE in $LISTA; do

CODIGO=`echo $CLIENTE | awk -F "|" '{print $1}'`
NOME=`echo $CLIENTE | awk -F "|" '{print $2}'`
IP=`echo $CLIENTE | awk -F "|" '{print $3}'`
DOWN=`echo $CLIENTE | awk -F "|" '{print $4}'`
UP=`echo $CLIENTE | awk -F "|" '{print $5}'`
PRIO=`echo $CLIENTE | awk -F "|" '{print $6}'`
STAT=`echo $CLIENTE | awk -F "|" '{print $7}'`

# checa se esta ativado
if [ "$STAT" = "A" ]; then

UPLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME".in"
DOWNLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME".out"
touch $UPLOAD
touch $DOWNLOAD
chown 755 /etc/shaper/*

# Divisao por 10 automatica.
# Divide DOWNLOAD
DIV_DOWN=`echo " $DOWN / 10 " | bc`
# Divide UPLOAD
DIV_UP=`echo " $UP / 10 " | bc`

# Upload
echo "DEVICE=eth0,100Mbit,10Mbit" >> $UPLOAD
echo "RATE=$UP""KBit" >> $UPLOAD
echo "WEIGHT=$DIV_UP" >> $UPLOAD
echo "PRIO=$PRIO" >> $UPLOAD
echo "RULE=""$IP" >> $UPLOAD
echo "BOUNDED=yes" >> $UPLOAD
echo "ISOLATED=yes" >> $UPLOAD
echo "MARK="$CODIGO"" >> $UPLOAD
echo "$conta" >> $UPLOAD
## MARK UPLOAD -
iptables -t mangle -A POSTROUTING -s $IP -j MARK --set-mark $CODIGO

# Download
echo "DEVICE=eth2,100Mbit,10Mbit" >> $DOWNLOAD
echo "RATE=$DOWN""KBit" >> $DOWNLOAD
echo "WEIGHT=$DIV_DOWN" >> $DOWNLOAD
echo "PRIO=$PRIO" >> $DOWNLOAD
echo "RULE=""$IP" >> $DOWNLOAD
echo "BOUNDED=yes" >> $DOWNLOAD
echo "ISOLATED=yes" >> $DOWNLOAD

fi

done

/etc/init.d/shaper compile
/etc/init.d/shaper restart

## FIM DO ARQUIVO ##


*Detalhe o script não é meu, foi publicado e mantido o autor... encrementei a divisão automatica para facilitar.


  


2. Re: Script CBQ - Shell Script [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 23/09/2010 - 18:52h

Tipo, eu faria assim: Retirava a linha:

CODIGO=`echo $CLIENTE | awk -F "|" '{print $1}'`

E colocava:

CODIGO=0

só que FORA do for.

E depois, antes do fi, colocaria:

CODIGO=$((CODIGO+1))

** Essa linha acima incrementa a variavel codigo.

O contéudo dessa variável será: 0, 1, 2, etc. Para obter 0000, 0001, 0002, eu conheço o printf:

CODIGO=$(printf '%04d' $CODIGO)

** Coloque isso logo depois do for.

Então, resumindo, vai ficar assim:

#!/bin/bash
....
....
CODIGO=0
for CLIENTE in $LISTA; do
CODIGO=$(printf '%04d' $CODIGO)
NOME=`echo $CLIENTE | awk -F "|" '{print $2}'`
....
....
CODIGO=$((CODIGO+1))
fi


Bem, acho que é isso.
t+


3. ...

Grégory H. Ebertz
gregorye

(usa Debian)

Enviado em 24/09/2010 - 11:50h

Muito obrigado! saca soh como ficou...

=P

#!/bin/bash
# script criado por Tiago Andre Geraldi - virgulla@gmail.com
# Ajuda na auto incrementacao de codigo Marcos Paulo Ferreira
# Divisao de valores da banda por Gregory Henrique Ebertz

rm -f /etc/shaper/*

LISTA=`cat /etc/provedor/clientes_cbq`
CODIGO=0
for CLIENTE in $LISTA; do
CODIGO=$(printf '%03d' $CODIGO)

NOME=`echo $CLIENTE | awk -F "|" '{print $2}'`
IP=`echo $CLIENTE | awk -F "|" '{print $3}'`
DOWN=`echo $CLIENTE | awk -F "|" '{print $4}'`
UP=`echo $CLIENTE | awk -F "|" '{print $5}'`
PRIO=`echo $CLIENTE | awk -F "|" '{print $6}'`
STAT=`echo $CLIENTE | awk -F "|" '{print $7}'`

# checa se esta ativado
if [ "$STAT" = "A" ]; then

UPLOAD="/etc/shaper/cbq-1"$CODIGO"."$NOME".in"
DOWNLOAD="/etc/shaper/cbq-1"$CODIGO"."$NOME".out"
touch $UPLOAD
touch $DOWNLOAD
chown 755 /etc/shaper/*

# Divisao por 10 automatica.
# Divide DOWNLOAD
DIV_DOWN=`echo " $DOWN / 10 " | bc`
# Divide UPLOAD
DIV_UP=`echo " $UP / 10 " | bc`


# Upload
echo "DEVICE=eth0,100Mbit,10Mbit" >> $UPLOAD
echo "RATE=$UP""KBit" >> $UPLOAD
echo "WEIGHT=$DIV_UP" >> $UPLOAD
echo "PRIO=$PRIO" >> $UPLOAD
echo "RULE=""$IP" >> $UPLOAD
echo "BOUNDED=yes" >> $UPLOAD
echo "ISOLATED=yes" >> $UPLOAD
echo "MARK=1"$CODIGO"" >> $UPLOAD

## MARK UPLOAD -
iptables -t mangle -A POSTROUTING -s $IP -j MARK --set-mark 1$CODIGO

# Download
echo "DEVICE=eth2,100Mbit,10Mbit" >> $DOWNLOAD
echo "RATE=$DOWN""KBit" >> $DOWNLOAD
echo "WEIGHT=$DIV_DOWN" >> $DOWNLOAD
echo "PRIO=$PRIO" >> $DOWNLOAD
echo "RULE=""$IP" >> $DOWNLOAD
echo "BOUNDED=yes" >> $DOWNLOAD
echo "ISOLATED=yes" >> $DOWNLOAD

CODIGO=$((CODIGO+1))
fi

done

/etc/init.d/shaper compile
sleep 1
/etc/init.d/shaper restart

## FIM DO ARQUIVO ##



4. .....

Grégory H. Ebertz
gregorye

(usa Debian)

Enviado em 24/09/2010 - 16:52h

/etc/provedor/atualiza_cbq.sh: line 16: printf: 008: invalid number
/etc/provedor/atualiza_cbq.sh: line 74: 008: value too great for base (error token is "008")
find: warning: you have specified the -maxdepth option after a non-option argument (, but options ar


Alguma idéia ??


5. .....

Grégory H. Ebertz
gregorye

(usa Debian)

Enviado em 24/09/2010 - 17:41h

Axei a solução... asim que der posto aqui para quem mais for útil!

Vlw!


6. Re: Script CBQ - Shell Script [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 25/09/2010 - 09:52h

Foi mal ae Greg, tinha esquecido desse detalhe (na verdade testei ate o 7, sendo que depois do 8 já traz problemas :| ). O detalhe é que o shell está interpretando o número do código como octal, daí quando aparece o '8' ele reclama que o número é maior do que a base.

Bem, já que você resolveu então diz aí como você fez. Eu sei que, um modo de fazer isso, é retirar os zeros iniciais do número, e um outro modo (um pouco mais lento) é mandar outro programa realizar a aritmética (ex: o bc).

É isso ae!
t+


7. segue...

Grégory H. Ebertz
gregorye

(usa Debian)

Enviado em 28/09/2010 - 11:06h

Segue como ficou, muito obrigado por sua contribuição:

#!/bin/bash
# script criado por Tiago Andre Geraldi - virgulla@gmail.com
# Ajuda na auto incrementacao de codigo Marcos Paulo Ferreira
# Divisao de valores da banda por Gregory Henrique Ebertz

rm -f /etc/shaper/*

LISTA=`cat /etc/provedor/clientes_cbq`
CODIGO=1
for CLIENTE in $LISTA; do

CODIGO= echo $(printf "%03d" $CODIGO)

NOME=`echo $CLIENTE | awk -F "|" '{print $2}'`
IP=`echo $CLIENTE | awk -F "|" '{print $3}'`
DOWN=`echo $CLIENTE | awk -F "|" '{print $4}'`
UP=`echo $CLIENTE | awk -F "|" '{print $5}'`
PRIO=`echo $CLIENTE | awk -F "|" '{print $6}'`
STAT=`echo $CLIENTE | awk -F "|" '{print $7}'`

# checa se esta ativado
if [ "$STAT" = "A" ]; then

UPLOAD="/etc/shaper/cbq-1"`printf "%03d" $CODIGO`"."$NOME".in"
DOWNLOAD="/etc/shaper/cbq-1"`printf "%03d" $CODIGO`"."$NOME".out"
touch $UPLOAD
touch $DOWNLOAD
chown 755 /etc/shaper/*

# Divisao por 10 automatica.
# Divide DOWNLOAD
DIV_DOWN=`echo " $DOWN / 10 " | bc`
# Divide UPLOAD
DIV_UP=`echo " $UP / 10 " | bc`

# Upload
echo "DEVICE=eth0,100Mbit,10Mbit" >> $UPLOAD
echo "RATE=$UP""KBit" >> $UPLOAD
echo "WEIGHT=$DIV_UP" >> $UPLOAD
echo "PRIO=$PRIO" >> $UPLOAD
echo "RULE=""$IP" >> $UPLOAD
echo "BOUNDED=yes" >> $UPLOAD
echo "ISOLATED=yes" >> $UPLOAD
echo "MARK=1"`printf "%03d" $CODIGO`"" >> $UPLOAD
## MARK UPLOAD -
iptables -t mangle -A POSTROUTING -s $IP -j MARK --set-mark 1$CODIGO

# Download
echo "DEVICE=eth2,100Mbit,10Mbit" >> $DOWNLOAD
echo "RATE=$DOWN""KBit" >> $DOWNLOAD
echo "WEIGHT=$DIV_DOWN" >> $DOWNLOAD
echo "PRIO=$PRIO" >> $DOWNLOAD
echo "RULE=""$IP" >> $DOWNLOAD
echo "BOUNDED=yes" >> $DOWNLOAD
echo "ISOLATED=yes" >> $DOWNLOAD

CODIGO=$((CODIGO+1))
fi

done

/etc/init.d/shaper compile
sleep 1
/etc/init.d/shaper restart

## FIM DO ARQUIVO ##







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts