リモート クライアントのディスク使用量をチェックするスクリプトを作成しようとしています。スクリプトには、意味のある出力のためのフィルターがあります。
...
ssh server "sudo df -Ph 2>/dev/null \
| tail -n +2 \
| grep -v tmpfs \
| grep G| sed s/%//g \
| sed s/G//g \
| awk '{ if($5 < 20) print $0;}'" #to get only disks that the usage is under %20
...
このコマンドラインは CentOS/RHEL マシンでは正常に実行されますが、Ubuntu では awk コマンドに関して以下のようなエラーが発生します。
awk: cmd. line:1: { if( < 20) print bash;}
awk: cmd. line:1: ^ syntax error
Ubuntu の awk で比較を行うにはどうしたらいいですか? 「-gt、-ge...」のような演算子も機能しません。
答え1
比較は問題ありませんが、比較する変数がないことが問題です。SSH コマンド ライン全体が二重引用符で囲まれているため、 は$5
'ssh' に到達する前にローカル シェルによって消費されます。\$5
これを回避するには、 と入力する必要があります。後者の場合も同様です$0
(エラー メッセージに "print bash;" と表示されていることに注意してください)。