2012-02-11 304 views
3

コマンドを実行するシェルスクリプトを作成しようとしています。他のスクリプトを実行した出力が空でない場合は音楽を再生します。これまでのところ、私はこれを持っています。しかし、私は最後の行に "Unexpected operator"エラーが出ています。コードの問題は何ですか?シェルスクリプトの文字列を比較すると "Unexpected operator"エラーが発生する

さらに、myscriptがうまく動作し、コマンドラインからvlcがうまく動作することも確認しました。

#!/bin/sh 

TOF=`myscript | cat` 
EMPTYSTR="" 

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

はあなた 'エコー缶"$ TOF" '? – kev

+0

はい。問題は、=の代わりに2つの文字列を比較するために==を使用したということでした。 – eqb

答えて

4

文字列一致のテストは、=を使用して動作します。 (実際には、平等はここでは間違っています。の不等式を使用します)。ただし、空でない文字列を確認するには、単に-n "$TOF"を使用します。

また、|catを使用する必要はありません。

+0

はい、それです、 'bash'は' = 'と' == 'の両方で動作し、これは私が見逃したものです。 –

+0

少なくともDebianベースのシステムでは、 '/ bin/sh'は' dash'にシンボリックリンクされています。 – fnl

+0

はい、@ fnl、それは私が言ったことです。 –

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

(私は多分、私はいくつかのbashismを欠けている、あなたのコードが悪いのか分からないのに、あなたは#!/bin/bash#!/bin/shを変更してみてください)。

+0

は何も返しません – eqb

+0

空または空でない結果が得られますか?あなたのコードではなく、あなたの散文でのように空であれば、 '||'を '&&'に変更してください。 –

1

試してみてください。

$ cat myscript 
#!/bin/bash 

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

を、この方法をご確認ください:

#!/bin/sh 

TOF=`myscript | cat` 

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

もあなたが失敗に成功し、return 1return 0にスクリプトを変更することができます

#!/bin/bash 

if myscript 
then 
    echo "vlc somemusicfile.mp3" 
fi 
関連する問題