Bash 脚本 Case 语句(if-not 逻辑)

Bash 脚本 Case 语句(if-not 逻辑)

我写了一个小的 bash 脚本。它会尝试找到这个词错误。如果找到,结果值将是非零数字(例如 25。我在脚本中提到,但它是可变数字值),如果没有找到,它将是 0。

我的问题是:我想使用case语句,这样如果输出不为零,则执行以下命令

truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit &

脚本在这里:

#! /bin/bash

case "$(grep ERROR /root/test/wayfile.log | wc -w)" in

25)  echo "empty log file and kill screen: $(date)" >> /var/log/finderror.txt
    truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit &
;;
0)  # all ok
;;
esac

答案1

一种选择:告诉case寻找 a 0,在这种情况下:什么也不做;否则,执行你的命令:

case X in
  (0) : ## do nothing
      ;;
  (*) truncate ...
      ;;
esac

另一种选择:告诉case寻找任何非零数字:

case X in 
  ([123456789]) truncate ...
esac

...但我不会尝试将数字与 匹配,而是case使用test

if [ "$(grep -c ERROR /root/test/wayfile.log)" -gt 0 ]
then
  truncate ...
fi

我已简化grep ... | wc -w为 just grep -c,它要求grep进行计数而不是涉及wc

此外,既然你是真的ERROR只是对文件中是否存在该单词感兴趣,您可以询问grep它是否存在:

if grep -F -q ERROR /root/test/wayfile.log
then
   truncate ...
fi

-F标志告诉 grep 我们的搜索文本是纯文本(“固定”)——没有正则表达式;该-q标志告诉 grep 要“安静”——不计算或输出匹配行,只是根据是否找到(或没有)搜索文本来设置其退出状态。成功的退出代码(0)表示在文件中至少找到了一次搜索文本;失败表示在文件中根本没有找到搜索文本。

相关内容