【发布时间】:2016-12-08 14:11:29
【问题描述】:
我正在尝试创建一个在后台持续运行的 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/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
【问题讨论】:
-
正如@Someprogrammerdude 建议的那样,至少在 if 和 elif 中使用相同的方括号策略(建议在两者中使用双方括号)。有用吗?
-
一个问题是
$?是最后一个命令的退出代码(通常为零表示成功,非负数表示失败)。它不包含输出的结果。如果您需要grep命令的输出,您需要捕获它。 -
$?是最近执行的cmd的返回状态。它始终是一个整数,它不会包含像45:00这样的任何东西。这里还有很多其他问题但是尝试您的第一个 cmd 并将其输出保存到 var, ile。hhmm=$(rpi-cecd... )。现在将其与case "$hhmm" in 45[:]00 ) cmd1 ... ; 45[:]03 ) cmd2 ... ;; * ) echo "don't know how to process $hhmm" ;; esac进行比较。祝你好运。 -
Shellter,你能解释一下我应该如何使用它吗?当我把它粘贴进去并将cmd1更改为echo时,终端在运行代码时没有任何响应?
-
rpi-cecd的正常输出是多少
标签: bash if-statement case