首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cat和if的Bash脚本错误

cat和if的Bash脚本错误
EN

Stack Overflow用户
提问于 2012-09-28 16:14:40
回答 3查看 9K关注 0票数 0

我正在学习bash,但现在让这个脚本工作起来有很多问题:

代码语言:javascript
复制
#!/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

当我执行这个脚本时,我得到的错误是:

代码语言:javascript
复制
./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的输出是正确的分配给电池。我尝试了一些不同的东西,比如{ [ ¨,但都不起作用。是的,该文件存在,并且与脚本位于同一文件夹中。

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-28 16:19:45

代码语言:javascript
复制
BATTERY='cat battery.txt'

它不会执行cat battery.txt,它只是将"cat battery.txt“作为字符串保存到变量中。

您应该:

代码语言:javascript
复制
BATTERY=$(cat battery.txt)

代码语言:javascript
复制
BATTERY=`cat battery.txt`

(首选第一种形式。)

你的测试也有语法错误。例如,使用:

代码语言:javascript
复制
elif [[ $BATTERY -le 10 && $BATTERY -gt 0 && $G -eq 0 ]]; then ...

[[[实际上是完全不同的东西。

[test程序(查看ls /usr/bin/[man test),[[ expr ]]是shell复合命令(conditional expression)。

票数 2
EN

Stack Overflow用户

发布于 2012-09-28 16:19:43

要获得命令的输出,需要用反引号将命令括起来,而不是用引号:

代码语言:javascript
复制
BATTERY=`cat battery.txt`
        ^               ^
票数 0
EN

Stack Overflow用户

发布于 2012-09-28 16:20:54

条件的正确语法是

代码语言:javascript
复制
[[ $BATTERY -le 55 && $BATTERY -gt 40 && $D -eq 0 ]]

即没有单个方括号。对于数字比较,您也可以使用双括号:

代码语言:javascript
复制
if (( BATTERY==55 && BATTERY > 40 && D == 0 )) ; then ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12636170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档