2012-11-12 63 views
1

我定下面的代码,以便它的工作原理:bash脚本字符串比较错误,想不通

#!/bin/bash 
out="$(cat /proc/acpi/bbswitch)" 
if [[ "$out" == *OFF* ]]; 
then 
    tee /proc/acpi/bbswitch <<<ON 
    echo "Nvidia card activated." 
else 
    tee /proc/acpi/bbswitch <<<OFF 
    echo "Nvidia card disabled." 
fi 

这是用于激活或禁用我的擎天柱卡进行。我得到的第4行的错误:

./.bb: line 4: [0000:01:00.0 OFF: command not found 
OFF 
Nvidia card disabled. 

我可以从中读取,它试图执行$ out变量。为什么?

+0

您已经创建了severa我改变了这个问题。错误是否仍然存在? –

回答

3

您需要确保括号[/]与实际变量之间至少有一个空格;即:从

if ["$out" == "$is"]; 

改变你的代码:

if [ "$out" == "$is" ]; 

,它应该工作。

原因是[实际上是bash中的“测试”命令。尝试在您提示:

which [ 

,你应该看到:

/usr/bin/[ 

此外,man [阅读更多有关语法

(注意,因为参数之间用空格,需要界定作为第二个变量和]之间的空格,测试使用]作为终止标记)

+0

嗯..我现在修好了,但if语句有问题。它从不执行ON部分,只执行OFF部分。 –

+0

我试过你的命令,特里斯坦,与桑普森的变化,它的作品。也许你没有得到你期望的一个变量的价值?尝试在'#!/ bin/bash'下添加'set -x',你可以用这种方式调试输出。 – Stuart

+0

[[0000:01:00.0 OFF == \ O \ F \ F]]这是什么意思,\ O \ F \ F –