我正在嘗試編寫一個腳本來檢查遠端客戶端的磁碟使用情況。腳本中有一個過濾器用於有意義的輸出:
...
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”之前就被你的本地 shell 吃掉了——你必須輸入它以\$5
避免這種情況。後者也是如此$0
(請注意錯誤訊息如何在其位置顯示“print bash;”)。