在本文中,将探讨如何使用expect
自动执行串口命令,并在Debian开机时运行这些命令。
自动执行串口命令
在某些情况下,可能需要自动执行一系列的串口命令。例如,可能需要配置一个设备,然后连接到互联网。在这种情况下,可以使用一个简单的bash脚本来自动执行这些命令。
以下是一个示例脚本:
#!/bin/bash # 打开串口 exec 3<> /dev/ttyUSB2 # 发送命令 echo -e "AT+QCFG=\"usbnet\"\r" >&3 sleep 1 echo -e "AT+QICSGP=1,1,\"internet\"\r" >&3 sleep 1 echo -e "AT+QCFG=\"usbnet\",1\r" >&3 # 关闭串口 exec 3<&- exec 3>&- AT+QCFG="usbnet" AT+QICSGP=1,1,"internet" AT+QCFG="usbnet",1
这个脚本首先打开串口/dev/ttyUSB2
,然后发送一系列的AT命令。每个命令后面都有一个sleep
命令,以确保设备有足够的时间来处理前一个命令。最后,脚本关闭串口。
使用Expect自动执行串口命令
在某些情况下,可能需要自动执行一系列的串口命令。例如,可能需要配置一个设备,然后连接到互联网。在这种情况下,可以使用expect
脚本来自动执行这些命令。
以下是一个示例脚本:
#!/usr/bin/expect # 启动microcom spawn sudo busybox microcom /dev/ttyUSB2 # 发送第一个AT命令并打印 send "AT+QCFG=\"usbnet\"\r" exp_send_user "Sending: AT+QCFG=\"usbnet\"\n" # 等待设备响应并打印返回值 expect { -re "(.*)\r\nOK" { exp_send_user "Received: $expect_out(1,string)\n" } } # 发送第二个AT命令并打印 send "AT+QICSGP=1,1,\"internet\"\r" exp_send_user "Sending: AT+QICSGP=1,1,\"internet\"\n" # 等待设备响应并打印返回值 expect { -re "(.*)\r\nOK" { exp_send_user "Received: $expect_out(1,string)\n" } } # 发送第三个AT命令并打印 send "AT+QCFG=\"usbnet\",1\r" exp_send_user "Sending: AT+QCFG=\"usbnet\",1\n" # 等待设备响应并打印返回值 expect { -re "(.*)\r\nOK" { exp_send_user "Received: $expect_out(1,string)\n" } } # 退出microcom send "\x1d" expect eof
这个脚本在启动microcom后立即发送第一个AT命令,然后等待设备返回"OK"。然后,它发送下一个AT命令,等待设备返回"OK",以此类推。最后,它发送一个退出microcom的命令。
在Debian开机时运行脚本
在Debian系统中,可以使用systemd
服务来在开机时运行脚本。以下是一个示例systemd
服务文件:
[Unit] Description=Run script at startup [Service] ExecStart=/path/to/your/script.sh [Install] WantedBy=multi-user.target
这个服务文件定义了一个新的systemd
服务,该服务在开机时运行指定的脚本。你需要将/path/to/your/script.sh
替换为你的脚本的实际路径。
要使这个服务在开机时运行,你需要将这个服务文件保存为/etc/systemd/system/your-service-name.service
,然后运行以下命令:
sudo systemctl enable your-service-name
这个命令将使your-service-name
服务在开机时启动。
在指定文件的指定行增加一行内容
在Linux中,可以使用sed
命令在指定的行数插入一行。以下是一个示例,它将在文件的第3行插入一行:
sed -i '37i\ip route add default via 192.168.1.1 dev eth0' /etc/profile sudo sed -i '22i\ip route add default via 192.168.1.1 dev eth0' /etc/rc.local && sudo sed -n '22p' /etc/rc.local
这个命令会直接在原文件上做修改。
总结
在本文中,讨论了如何使用expect
自动执行串口命令,如何在Debian开机时运行脚本,以及如何在指定文件的指定行增加一行内容。这些技术可以帮助自动化一些常见的任务,提高的工作效率。