Bash 错误:缺少 [:缺少 `]'

Bash 错误:缺少 [:缺少 `]'

我在 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 -c1awk=切割(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%"

相关内容