Como usar o i2cset para exibir o endereço IP

0

Estou tentando usar o comando i2cset para exibir caracteres na minha tela LCD. Por exemplo, i2cset -y 1 0x3e 0x40 0x49 displays I e assim por diante. Agora quero tentar exibir meu endereço IP. Eu tinha postado esta questão anteriormente em um fórum onde foi sugerido que eu poderia usar o seguinte script:

#!/bin/bash

IP=$(hostname -I)

function hex()
{
printf "0x%02x\n" "'$1"
}

for i in "echo $IP | grep -o .";
do
hx=$(hex $i)
i2cset -y 1 0x3e 0x40 $hx
done

Eu executo o script usando o comando:

sudo bash -x ip.sh

ip.sh sendo o nome do arquivo ..

Eu recebo as seguintes informações impressas na tela do meu laptop:

root@beaglebone:~# sudo bash -x ip.sh
++ hostname -I
+ IP='192.168.2.111 192.168.7.2 '
+ for i in '"echo $IP | grep -o ."'
++ hex echo 192.168.2.111 192.168.7.2 '|' grep -o .
++ printf '0x%02x\n' ''\''echo'
+ hx=0x65
+ i2cset -y 1 0x3e 0x40 0x65

Script atualizado:

#!/bin/bash

IP=$(hostname -I)

function hex()
{
printf "0x%02x\n" "'$1"

 }

for i in $(echo $IP | grep -o .)
hostname -I | while read -n1 i
do
  hx=$(hex $i)
  i2cset -y 1 0x3e 0x40 $hx
done

Ocorre um erro dizendo agora:     try1.sh: linha 12: erro de sintaxe próximo do token inesperado hostname' try1.sh: line 12: hostname -I | enquanto ler -n1 i '

Por favor, ajude.

    
por Goldengirl 02.02.2015 / 13:21

1 resposta

0

Se você executar o comando como sh ip.sh , ele será executado usando sh , não com bash (tornando a linha shebang sem sentido). Ou execute-o com bash:

bash ip.sh

Ou torne-o executável e execute-o diretamente:

./ip.sh

O shell Bourne tradicional ( sh ) não suporta a palavra-chave function para definição de função .

Além disso, "echo $IP | grep -o ." não executa esse comando, simplesmente é essa cadeia. Você precisa fazer:

for i in $(echo $IP | grep -o .)

Pode ser mais fácil ler em um caractere por vez:

hostname -I | while read -n1 i
do
    hx=$(hex $i)
    i2cset -y 1 0x3e 0x40 $hx
done
    
por muru 02.02.2015 / 13:39