BASH |如果命令等于某件事,如果执行某件事,则为其他
我正在尝试创建一个BASH脚本,它将在后台持续运行。这个bash脚本应该请求命令rpi cecd的结果,如果它包含45:00,则执行某些操作,如果它包含45:03,则执行其他操作。但目前,如果我要求一个以上的结果,我无法让脚本工作 工作代码,但只要求45:00BASH |如果命令等于某件事,如果执行某件事,则为其他,bash,if-statement,case,Bash,If Statement,Case,我正在尝试创建一个BASH脚本,它将在后台持续运行。这个bash脚本应该请求命令rpi cecd的结果,如果它包含45:00,则执行某些操作,如果它包含45:03,则执行其他操作。但目前,如果我要求一个以上的结果,我无法让脚本工作 工作代码,但只要求45:00 /home/rpi-cecd/rpi-cecd | grep -q "45:00" && ok 代码我试过了,但根本不起作用 /home/rpi-cecd/rpi-cecd | grep '45' > /dev/
/home/rpi-cecd/rpi-cecd | grep -q "45:00" && ok
代码我试过了,但根本不起作用
/home/rpi-cecd/rpi-cecd | grep '45' > /dev/null
if [[ $? =~ .*45:00.* ]]
then
echo "OK Button Clicked - HMS"
ok
elif [ $? == *"45:03"* ]
then
echo "Left Button Clicked - Canteen"
left
else
echo "Nothing Clicked?"
fi
编辑
我只是试了一下,运气不好
hhmm=$(/home/rpi-cecd/rpi-cecd)
case "$hhmm" in
45[:]00 )
ok
;;
45[:]03 )
left
;;
* )
echo "don't know how to process $hhmm"
;;
esac
如果
rpi-cecd
连续运行而不退出,则不能只捕获一次其输出。你需要不断地阅读它。您可以通过在读取时将其输出管道化到循环来实现这一点
/home/rpi-cecd/rpi-cecd | while IFS= read -r line; do
case $line in
*45:00*)
ok
;;
*45:03*)
left
;;
*)
echo "don't know how to process $line"
;;
esac
done
在使用答案之前,您可能需要清理答案:
payload=
while read line;do
[ "$line" ] && [ -z "${line//*payload=*}" ] && payload=${line#*payload=[}
done < <(/home/rpi-cecd/rpi-cecd)
case ${payload%%]*} in
*45:00 )
echo payload 45oo
;;
*45:03 )
echo payload 45.3
;;
* )
echo "other ("${payload%%]*}")..."
;;
esac
有效载荷=
读行时;做
[“$line”]&&&&z“${line//*有效负载=*}”]&&payload=${line#*有效负载=[}”
完成<如@Someprogrammerdude建议的那样,并且至少在if和elif中使用相同的方括号策略(建议在两者中使用双方括号)。是否有效?一个问题是$?
是最后一个命令的退出代码(成功通常为零,失败为非负数)。它不包含输出结果。如果需要从grep
命令获取输出,则需要捕获它。$?
是最近执行的cmd的返回状态。它始终是一个整数,不会包含任何类似45:00
的内容。这里有很多其他问题,请尝试使用第一个cmd并保存其输出对于变量,ile.hhmm=$(rpi cecd…
。现在将其与45[:]00)cmd1…;45[:]03)cmd2…;*)echo中的大小写“$hhmm”进行比较“不知道如何处理$hhmm”;esac
。祝你好运。Sheller,你能详细解释一下我应该如何使用它吗?当我粘贴它并将cmd1更改为echo时,终端在运行代码时没有给出任何响应。rpi cecd
的正常输出是什么?/这仍然不起作用:/忘了提到,但这个命令就像一个尾巴,它总是在写东西到终端,当我点击电视遥控器上的OK按钮时,它会写入一行包含45:00的代码。(如果这改变了什么)此命令输出“other…”然后结束,当命令运行且按下电视遥控器上的按钮时,rpi cecd尾随并仅写入45:0…的行。好的,您必须读取rpi cecd
的整个输出以查找有效负载行。