在 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: 预期的一元运算符
该变量used
为空,导致有关一元运算符的错误消息。可能的原因是没有rootfs
在df -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)