2012-02-11 77 views
3

我試圖創建一個運行命令並播放音樂的shell腳本,如果運行其他腳本的輸出不爲空。到目前爲止,我有這個。但是,我一直在最後一行收到「意外的操作員」錯誤。代碼有什麼問題?在shell腳本中比較字符串時出現「意外操作符」錯誤

作爲補充說明,我已驗證myscript正常工作,並從命令行運行vlc,就像那樣工作。

#!/bin/sh 

TOF=`myscript | cat` 
EMPTYSTR="" 

if [ "$TOF" == "$EMPTYSTR" ]; then 
    echo "vlc somemusicfile.mp3" 
fi 
+0

你能'回聲「$ TOF」'? – kev 2012-02-11 17:09:17

+0

是的。我認爲問題在於我用==來比較兩個字符串而不是=。 – eqb 2012-02-11 17:17:06

回答

4

使用=測試字符串相等。 (事實上​​,這裏的平等是錯誤的,你想使用不等式)。但是,您可以簡單地使用-n "$TOF"來檢查非空字符串。

另外,使用|cat是不必要的。

+0

是的,就是這樣,'bash'同時適用'='和'==',這就是我錯過的。 – 2012-02-11 17:04:33

+0

至少在基於Debian的系統上,'/ bin/sh'被符號鏈接到'dash',這會在OP使用'=='時描述的方式失敗。 – fnl 2012-02-11 17:07:17

+0

是的,@fnl,這就是我的意思。 – 2012-02-11 17:14:46

2
test -z "$(myscript)" || echo "vlc somemusicfile.mp3" 

(雖然我不知道什麼是你的代碼錯誤呢,也許我錯過了一些bashism,你可以嘗試改變#!/bin/sh#!/bin/bash)。

+0

什麼也沒有返回 – eqb 2012-02-11 17:05:40

+0

你想要空的或非空的結果嗎?如果它是空的,就像在你的代碼中那樣,而不是在你的散文中,那麼把'||'改成'&&'。 – 2012-02-11 17:14:18

1

嘗試:

#!/bin/sh 

TOF=`myscript | cat` 

if [[ -z "$TOF" ]] 
then 
    echo "vlc somemusicfile.mp3" 
fi 

你也可以在你成功的腳本更改爲return 0和失敗return 1

$ cat myscript 
#!/bin/bash 

if [[ -s somemusicfile.mp3 ]] 
then 
    return 0 
else 
    echo "File does not contain music" 
    return 1 
fi 

,並檢查是這樣的:

#!/bin/bash 

if myscript 
then 
    echo "vlc somemusicfile.mp3" 
fi