2012-11-12 91 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 –