[Resolvido] [arithmetic expression: expecting primary: " % 255"]

Iniciado por reynaldohortensi, 22 de Setembro de 2014, 19:01

tópico anterior - próximo tópico

reynaldohortensi

Olá galera,

eu estou tentando escrever um script para mudar meu endereço mac pra um aleatório, mas o problema não está relacionado à mudança de mac e sim (ou talvez) a um erro de sintax.

Esse é o conteúdo do arquivo chmac.sh:
#!/bin/bash

echo $SHELL
MAC=00
MAX=$(echo "16 ^ 2 - 1" | bc)
echo "MAX vale "$MAX

for x in 1 2 3 4 5; do
   rand=$RANDOM
   NUM=$((${rand} % ${MAX}))
   echo "NUM em decimal "$NUM
   NUM=`echo "obase=16; $NUM" | bc`
   echo "NUM convertida para hexa "$NUM
   NUM=`printf "%02x" 0x$NUM`
   MAC=$MAC:$NUM
done

echo "O novo MAC será "$MAC
service network-manager stop
ifconfig $1 down
ifconfig $1 hw ether $MAC
ifconfig $1 up
service network-manager start


Quando executo da primeira maneira (como um script deve ser executado) tenho a seguinte saída de erro:
Citar$ sudo ./chmac.sh wlan0
/bin/bash
MAX vale 255
./chmac.sh: 14: ./chmac.sh: arithmetic expression: expecting primary: " % 255"
Por acaso descobri que se rodar com "bash" antes funciona:
Citar$ sudo /bin/bash ./chmac.sh wlan0
/bin/bash
MAX vale 255
NUM em decimal 238
NUM convertida para hexa EE
NUM em decimal 55
NUM convertida para hexa 37
NUM em decimal 31
NUM convertida para hexa 1F
NUM em decimal 176
NUM convertida para hexa B0
NUM em decimal 162
NUM convertida para hexa A2
O novo MAC será 00:ee:37:1f:b0:a2
network-manager stop/waiting
network-manager start/running, process 7946

Alguém sabe porque não funciona da primeira maneira?

Abraços e muito obrigado desde já.




reynaldohortensi

Galera,
acho que resolvi! \o/

Haviam alguns comentários no início do script que eu não publiquei, mas a shebang (#!/bin/bash) DEVE estar na primeira linha do script. Caso contrário ela é interpretada também como um comentário e o script pode rodar na shell incorreta. Então passei a shebang pra antes dos comentários.

Vou deixar aqui casa alguém tenha o mesmo problema que eu.

Abraços!