如何使用 i2cset 显示 ip 地址

如何使用 i2cset 显示 ip 地址

我正在尝试使用i2cset命令在我的 LCD 屏幕上显示字符。例如i2cset -y 1 0x3e 0x40 0x49 displays I等等。现在我想尝试显示我的 IP 地址。我之前在一个论坛上发布了这个问题,有人建议我使用以下 bash 脚本:

#!/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

我使用以下命令执行脚本:

sudo bash -x ip.sh

ip.sh 是文件名..

我的笔记本电脑屏幕上打印了以下信息:

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

更新脚本:

#!/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

现在它给出了一个错误:try1.sh:第 12 行:意外标记hostname' try1.sh: line 12:主机名 -I | 附近的语法错误,而读取 -n1 i'

请帮忙。

答案1

如果您以 方式运行该命令sh ip.sh,它将使用sh而不是 with 来运行bash(这使得 shebang 行毫无意义)。要么使用 bash 来运行它:

bash ip.sh

或者使其可执行并直接运行:

./ip.sh

传统的 Bourne shell ( sh) 不支持function关键字函数定义


除此之外,"echo $IP | grep -o ."不会运行该命令,它只是那个字符串。您需要执行以下操作:

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

一次读取一个字符可能会更容易:

hostname -I | while read -n1 i
do
    hx=$(hex $i)
    i2cset -y 1 0x3e 0x40 $hx
done

相关内容