所以我试图判断机器是否有电池,然后根据是否有电池运行不同的命令。这是我到目前为止所拥有的:
upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
echo "BAT0 PRESENT" >> /tmp/batstat
else
echo "NO BAT0" >> /tmp/batstat
fi
但是,当按预期将 NO BAT0 写入 /tmp/batstat 时,这会返回错误“bash: [: 参数太多”。仅运行 grep 可以正常工作,所以我不明白为什么它不能作为 if 条件工作。
如果有更好的方法来检查电池,我百分百愿意接受。
答案1
if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
将执行一系列命令并处理最后一个命令的状态,在本例中为 grep。grep
如果匹配则返回 true,否则返回 false。
答案2
grep -F BAT0 /tmp/batstat
绝不是test
的内置条件表达式(如精美手册中详述) bash
。由于 的输出grep
未使用,因此-q
选项和依赖退出代码可能就足够了。
grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
echo yea
else
echo nay
fi
此外,/tmp/batstat
这可能是一个非常糟糕的选择,尤其是在邪恶的本地用户可以访问的情况下。考虑改为使用mktemp(1)
,或未在 下找到该文件/tmp
。