我正在尝试轮询通过串行电缆发送数据的设备,每15分钟一次(Polldata
是设备识别的字符串)。为了测试,我每隔15秒轮询一次数据,使用sleep
暂停。该设备应发送3种不同类型的字符串(从CS#1
开始到#3
)。
这是:
#!/bin/bash
#Port settings
stty -F /dev/ttyUSB0 115200
while [ 1 ]; do
curdate=`date "+%M"`
#for testing, I comment that line out:
#if [ $curdate -eq 00 -o $curdate -eq 15 -o $curdate -eq 30 -o $curdate -eq 45 ]; then
echo Polldata > /dev/ttyUSB0
READ=`dd if=/dev/ttyUSB0 count=1 2>/dev/null`
echo $READ
case "$READ" in
*"CS#1"*) echo $READ >> testCS1.txt ;;
*"CS#2"*) echo $READ >> testCS2.txt ;;
*"CS#3"*) echo $READ >> testCS3.txt ;;
esac
#edit: for testing, sleep for 15 sec
sleep 15
pkill -9 sleep
#fi
done
出于某种原因,我的脚本在运行后运行了两次。为什么?我按./nameofmyscript.sh
另外,我是bash的新手,但我读到使用dd
是有风险的。在这种情况下我应该使用什么?在轮询它之后设备也没有发送任何东西......
在while循环中杀死进程的正确方法是什么?如果我不在循环结束时杀死它们,我最终会有很多dd和睡眠过程。我也应该在睡觉后杀死dd
吗?