2

chrunchbang Linux を実行しているノートブックにハードウェア ミュート ボタンを設定しようとしています。キー イベント処理が機能し、次のようなスクリプトを指しています。

curvol=$(amixer get Master | grep 'off')
if ["$curvol" != ""]
then
amixer set Master unmute 
else
amixer set Master mute
fi

割り当てられたボタンを押すと、ミュートされている場合はミュートが解除されます。ただし、ミュートされていない場合はミュートされません。

問題は、コマンドからの出力をチェックする if ステートメントにあると思います。if が true を返すかどうかに関係なく、常にミュート解除を行っているようです。

どんな助けでも大歓迎です!前もって感謝します。

4

4 に答える 4

3

[コマンドの名前です(またはシェル組み込みの場合もあります)。それが機能するには、その後にスペースが必要です。

if [ "$curvol" != "" ]
于 2013-01-09T01:25:47.220 に答える
2

次のように書くだけで、はるかに簡単になるようです。

amixer set Master ${curvol:+un}mute

これは次と同等です:

if test -n "$curvol"; then
  amixer set Master unmute
else
  amixer set Master mute
fi

しかし、言葉遣いははるかに少ないです。testまた、代わりにを使用すると[、構文エラーが発生しにくくなることにも注意してください。

于 2013-01-09T03:12:37.847 に答える
2

grep の戻り値を使用できます。

amixer get Master | grep 'off' &> /dev/null
if [ $? -eq 0 ] 
then
  amixer set Master unmute 
else
  amixer set Master mute
fi
于 2013-01-09T01:25:32.883 に答える