Bash条件语句

时间:2015-05-29 17:59:16

标签: bash conditional

我意识到这可能是一个非常简单的问题,但我无法弄清楚为什么这不起作用。我正在尝试检查文件夹是否大于35GB,如果是,请删除所有超过3天的文件。

使用此代码:

#!/bin/bash
MAX=35000000000
if [ $(du -sb ~/MEGA | cut -f1) \> $MAX ] then
   find ~/MEGA/* -mtime +3 -exec rm -fr {} \;
fi

我收到以下错误:

 syntax error near unexpected token `fi'

3 个答案:

答案 0 :(得分:5)

您在then关键字之前缺少分号或换行符。还要注意Bash使用>来比较字符串,而不是数字。对于数值比较,您应该使用-gt或Bash特定的((算术表达式求值程序。例如:

#!/bin/bash
MAX=35000000000
if (( $(du -sb ~/MEGA | cut -f1) > $MAX ))
then
   find ~/MEGA/* -mtime +3 -exec rm -fr {} \;
fi

参考:Bash conditional constructs

答案 1 :(得分:1)

更改if [ $(du -sb ~/MEGA | cut -f1) \> $MAX ] then

if (( $(du -sb ~/MEGA | cut -f1) > MAX )); then
if语句的

格式:

if condition;then
something
fi

或者

if condition
then
something
fi

或者

if condition;then something;fi

注意:

  1. 您可以在它们之间使用;合并多行

  2. 您可以将$$MAX中删除算术if语句

答案 2 :(得分:0)

Bash错误消息有时会产生误导。你在那之前忘记了分号。

#!/bin/bash
MAX=35000000000
if [ $(du -sb ~/MEGA | cut -f1) -gt $MAX ]; then
find ~/MEGA/* -mtime +3 -exec rm -fr {} \;
fi