シェルスクリプトでの文字列操作の処理(およびgrep結果のテスト)

シェルスクリプトでの文字列操作の処理(およびgrep結果のテスト)

タッチパッドを切り替えるためにこのスクリプトを作成しましたが(キーバインドします)、うまくいきません。このコードはなぜ動作しませんか?それでは、どうすればこの機能をよりエレガントに実行できますか?

#!/bin/sh

if [ "synclient | grep TouchpadOff | grep -o -E '[0-9]+'" ]
then
        synclient TouchpadOff=0
        notify-send "Touchpad Enabled"
else
        synclient TouchpadOff=1
        notify-send "Touchpad Disabled"
fi

ベストアンサー1

書くとき

 if [ "some string or other" ]
 then

演算子は[実行されず、some string or other空でない文字列を見て、それが値であると言いますtrue

欲しい

 if [ "`synclient | grep TouchpadOff | grep -o -E '[0-9]+'`" ] 

またはもう少し現代的なもの

if [ "$(synclient | grep TouchpadOff | grep -o -E '[0-9]+')" ]

しかし、grepは終了コードを生成するので、実際にコマンドが文字列を生成したことを確認する必要はありません。

if synclient | grep TouchpadOff | grep -q -E '[0-9]+'
then

あなたが欲しいものをする必要があります。 synclientの出力形式はわかりませんが、問題なく2つのgrepを1つにマージできることを願っています。

おすすめ記事