我正在尝试使用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