我正在学习bash,但现在我在使这个脚本工作时遇到了很多麻烦:
#!/bin/bash
A="0"
B="0"
C="0"
D="0"
E="0"
F="0"
G="0"
while true; do
sleep 1
BATTERY='cat battery.txt'
if [["$BATTERY" -le 100] && ["$BATTERY" -gt 85] && [$A -eq 0]]; then
A="1"
commands...
elif [["$BATTERY" -le 85] && ["$BATTERY" -gt 70] && [$B -eq 0]]; then
B="1"
commands...
elif [["$BATTERY" -le 70] && ["$BATTERY" -gt 55] && [$C -eq 0]]; then
C="1"
commands...
elif [["$BATTERY" -le 55] && ["$BATTERY" -gt 40] && [$D -eq 0]]; then
D="1"
commands...
elif [["$BATTERY" -le 40] && ["$BATTERY" -gt 25] && [$E -eq 0]]; then
E="1"
commands...
elif [["$BATTERY" -le 25] && ["$BATTERY" -gt 10] && [$F -eq 0]]; then
F="1"
commands...
elif [["$BATTERY" -le 10] && ["$BATTERY" -gt 0] && [$G -eq 0]]; then
G="1"
commands...
fi
done
执行此脚本时出现的错误是:
./changewill.sh: line 17: [[cat battery.txt: command not found
./changewill.sh: line 27: [[cat battery.txt: command not found
./changewill.sh: line 36: [[cat battery.txt: command not found
./changewill.sh: line 45: [[cat battery.txt: command not found
./changewill.sh: line 54: [[cat battery.txt: command not found
./changewill.sh: line 63: [[cat battery.txt: command not found
./changewill.sh: line 72: [[cat battery.txt: command not found
我一直在阅读并环顾四周,我认为cat
输出已正确分配给BATTERY。我尝试了一些不同的内容,例如{
[
¨
,但没有任何效果。
是的,该文件存在,并且与脚本位于同一文件夹中。
有什么建议吗?
答案 0 :(得分:2)
BATTERY='cat battery.txt'
不执行cat battery.txt
,只是将“cat battery.txt”作为字符串保存到该变量中。
你应该:
BATTERY=$(cat battery.txt)
或
BATTERY=`cat battery.txt`
(首选形式。)
您的测试也有语法错误。例如:
elif [[ $BATTERY -le 10 && $BATTERY -gt 0 && $G -eq 0 ]]; then ...
[
和[[
实际上完全不同。
[
是test
计划(结帐ls /usr/bin/[
和man test
),[[ expr ]]
是shell复合命令(conditional expression)。
答案 1 :(得分:0)
要获取命令的输出,您需要用反引号包装命令,而不是引号:
BATTERY=`cat battery.txt`
^ ^
答案 2 :(得分:0)
条件的正确语法是
[[ $BATTERY -le 55 && $BATTERY -gt 40 && $D -eq 0 ]]
即。没有单个方括号。对于数字比较,您也可以使用双括号:
if (( BATTERY==55 && BATTERY > 40 && D == 0 )) ; then ...