Bash脚本无法识别布尔逻辑,"命令未找到"

时间:2016-12-16 14:40:00

标签: linux bash shell

我是Bash脚本的新手,试图制作我的第一个备份脚本。当我运行它时,我总是得到这样的东西:

using namespace

我尝试了很多不同的语法,比如./backupscript.sh: line 9: [3=1: command not found ./backupscript.sh: line 9: 3=2]: command not found ./backupscript.sh: line 15: [3=1: command not found ./backupscript.sh: line 15: 3=3]: command not found ,双括号,没有引号,()-brackets single和double,我失去了理智。似乎bash根本没有认识到它是一个if语句。怎么了?谢谢!

["var"="1"]||["var"=2]

编辑:这里建议的正确语法做了诀窍,谢谢大家!我还在寻找关于Bash的好导游:)

2 个答案:

答案 0 :(得分:0)

使用以下作为最佳做法:

if  [[ $choice == 1 || $choice == 2 ]]; then
    ...
fi

请注意spaces==进行相等测试。

||&&double brackets中工作。还有一些其他不错的功能,例如与REGEX匹配的=~以及C-like languages中已知的运算符以及较少的意外。

答案 1 :(得分:0)

正如@fedorqui所说,你需要在括号周围留出空格。这是因为[实际上是test的同义词,是一个真正的程序,实际命令的名称也是如此。

为了让您的生活更轻松,请改用空格和双括号([[]])。这些是由bash内部处理的,并且对于意外错误(例如忘记变量替换周围的引号)更加强大。另外,&&||在双括号中作为逻辑AND和OR,但在单括号中 - 您必须使用-a和{{1而不是-o个表达式。

在bash中使用双括号("conditional expressions"),您可以写:

[ ]

并获得您期望的结果。