我在 Bash 中编写了一个简单的脚本,用于检查根文件系统上的 Linux 文件系统磁盘使用情况,并在系统大于 6% 时显示警告消息。
这些命令正在终端中运行,但是当我尝试该if
语句时,我在第 16 行收到此错误
[: missing
]'`
1 #!/bin/bash
2
3
4
5 clear
6 #checking for usage on the system and saving in a file usage1
7 df -h / >usage1
8
9 #display current use to the screen
10 clear
11 echo
12 awk '$5>6' usage1
13
14 #Creating variable to use in the awk if statemant
15 usage2= "awk '{print $5}'/home/peters/usage1 | tail -n1 |cut -c1"
16 #Building statemant
17 if ($usage2>6)
18 print "Warning file system greater than 6% !!"
19
20 exit 0
答案1
你的第 17 行应该是:
if [ $usage2 -gt 6 ]
您需要在[
之前和之后添加一个空格]
。另外,在比较数字时,您应该使用-eq
、-ne
、-gt
、-lt
、 、-ge
和-le
而不是熟悉的符号。
答案2
你想要(周围没有任何空格=
)
usage2=$(awk '{print $5}' /home/peters/usage1 | tail -n1 |cut -c1)
将...命令usage2
的输出放入变量中。您需要在大括号命令及其输入文件名之间有一个空格(但 周围没有空格)。顺便说一句,你可以简单地使用awk
|cut -c1
awk
=
切割(1)as cut -f5
(而不是awk '{print $5}'
...)来获取第五个字段。
顺便说一句,你不需要任何usage1
,你可能只需要编码
usage2=$(df | cut -f5| tail -n1 | cut -c2)
但我没有对此进行测试。
那么你应该使用
if [ "$usage2" -gt 6 ] ; then
echo "Warning file system greater than 6% !!" > /dev/stderr
fi
到测试(1)- 它通常是一个内置的 shell - 并处理空变量值。由于这是一条错误消息,因此应该转到标准错误, 不是标准输出。而且你不想使用printf
但是echo
(因为打印(1)专门处理%
)。也许你想要记录器(1)...
但是你的方法(在这里问,也许两次)很脆弱(问两次是粗鲁的!)。您需要了解有关 shell 的更多信息。阅读高级 bash 脚本编写指南,你不会浪费你的时间。另外,使用好的编辑器来编写 shell 脚本。一些编辑器 ( emacs
) 有相当好的 shell 模式 - 语法着色很有帮助! ...
#!/bin/bash -vx
顺便说一句,在调试阶段临时启动脚本会有所帮助。并删除clear
命令,你不需要它们......
最后,您是否考虑过使用磁盘配额?
答案3
尝试像这样编写 if 语句:
if [ condition ]; then
Stuff here
fi
答案4
[[ -n $(df -h / | awk 'int($5)>6{print $5}') ]] && echo "Warning file system greater than 6%"