-gt:一元运算符预期的 shell 脚本

Nul*_*ter 1 command-line bash

在 ubuntu 中升级包后出现此错误。

#!/bin/bash
used=$(df -H | grep  'rootfs' | cut -d "G" -f 4 | cut -d "%" -f 1)
limit=90
if [ $used -gt $limit ]; then Or [ "$used" -gt "$limit" ] Or [ "$used" -ge 90 ]
#delete file and mail command;
fi
Run Code Online (Sandbox Code Playgroud)

错误

[: -gt: 预期的一元运算符

hee*_*ayl 5

该变量used为空,导致有关一元运算符的错误消息。可能的原因是没有rootfsdf -H输出即在您的系统。

$ foo=
$ [ $foo -gt 10 ] && echo OK
bash: [: -gt: unary operator expected
Run Code Online (Sandbox Code Playgroud)

您的脚本中还有其他一些问题,OR 逻辑应为:

[ "$foo" -gt "$bar" ] || [ "$foo" -ge 90 ]
Run Code Online (Sandbox Code Playgroud)

也最好使用 shell keywod[[而不是test( [) 命令来避免许多陷阱:

[[ "$foo" -gt "$bar" ]] || [[ "$foo" -ge 90 ]]
Run Code Online (Sandbox Code Playgroud)

对于算术比较,您还可以使用((和常规算术运算符:

(( "$foo" > "$bar" )) || (( "$foo" >= 90 ))
Run Code Online (Sandbox Code Playgroud)

你甚至不需要把$变量名放在前面:

(( foo > bar )) || (( foo >= 90 ))
Run Code Online (Sandbox Code Playgroud)