Bashで数値を比較するには?

Bashで数値を比較するには?

このスクリプトはすでに存在しますが、機能しません。 if文では数値比較を評価できないからだと思います。

#!/bin/bash

{ read __ WIDTH; read __ HEIGHT; read __ __ BORDER_WIDTH; } < <(xwininfo -id "$(xdotool getactivewindow)" | grep -o -e 'Height:.*' -e 'Width:.*' -e 'Border width:.*')
echo "Height: $HEIGHT, Width: $WIDTH, Border width: $BORDER_WIDTH"

x = 1920
if($WIDTH == x)
then
    wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz 
else 
    xdotool key Ctrl+F12
fi

この問題をどのように解決できますか?

ベストアンサー1

このスクリプトにはいくつかの問題があります。

  • bashtestテストは、[ .. ]またはで実行してサブシェルを表すことができます[[ .. ]]()

  • x = 1920スペースなしで割り当てると、パラメーターとを含むコマンドが呼び出されます。代わりに使用してください。x=1920x=1920

  • 変数名の前にはドル記号を付ける必要があります。だから== xそれは悪くも良い== $xものでもある。 (算術評価または拡張除外:(( ... ))または$(( ... ))、コメントをお寄せいただきありがとうございます。先行は達成するのが難しい)。

  • -eq=文字列を比較するには、数字を、と比較する必要があります。あなたの場合でも、数字は同じ方法で保存されるため、うまく機能しますが、概念的に正しい演算子を使用する方が良いでしょう。==非標準等価物です=

  • 変数を引用するときは、可能であれば二重引用符を使用することに慣れる必要があります。たとえば、これによりワイルドカードを使用できなくなります。

で始まる行を修正しますx = 1920。修正されたバージョンは次のとおりです。

x=1920
if [ "$WIDTH" -eq "$x" ]
then
    wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz 
else 
    xdotool key Ctrl+F12
fi

おすすめ記事