直到循环进行bash脚本



我想使用以下方式使用loop命令,直到循环,以便脚本不应结束,如果条件是false

#!/bin/bash
read -p " enter the App name : " app
file="/logs/$app/$app.log"
if ! [ -f "$file" ]; then
    echo "$app.log not found, Please check correct log name in deployer"
    exit
fi
format=$(head -1 $file | awk '{print $1,$2,$3}')
format1=$(tail -1 $file | awk '{print $1,$2,$3}')
read -p " Enter the Date in this Format --'$format' : " first
until grep -q "$first" "$file"
do
  echo "Date not found"
  read -p " Enter the Date in this Format --'$format' : " first
done
final_first=$first
echo "logs are present till this '$format1' date, use this date if you want logs from Provided to latest."
read -p "Enter the end date : " end
until grep -q "$end" "$file"
do
  echo "Date not found"
  read -p "Enter the end date : " end
done
final_end=$end
cd /logs/$app
sed -n " /$final_first/,/$final_end/ "p $file >$app.txt
zip $app.zip $app.txt
rm $app.txt

但是我得到了这个输入

$ ./test
 enter the App name : cspt
 Enter the Date in this Format --'Sep 08 04:53:30' : er
logs are present till this 'at java.lang.Thread.run(Thread.java:662) ' date, use this date if you want logs from Provided to latest.
Enter the end date : Sep 08 04:53:30
  adding: cspt.txt (deflated 99%)

在这里,它不进行结束日期..并生成日志文件

但是我得到了这个输入

$ ./test
 enter the App name : cspt
 Enter the Date in this Format --'Sep 08 04:53:30' : er
logs are present till this 'at java.lang.Thread.run(Thread.java:662) ' date, use this date if you want logs from Provided to latest.
Enter the end date : Sep 08 04:53:30
  adding: cspt.txt (deflated 99%)

在这里,它不进行结束日期..并生成日志文件

相反,看起来确实在提示并阅读结束日期(示例中为Sep 08 04:53:30)。您可能是要说您希望脚本拒绝er作为开始日期吗?

也许可以使脚本更具歧视性,但是我认为没有理由认为它在做与您告诉它的事情不同的事情。您将其作为开始"日期"的开始,或多或少地出现在文件中的任何地方。认为字符串" er"会出现在冗长的日志文件中的某个地方并不是不合理的。

还要注意,如果给定的"日期"中的任何一个都有正则元时间,那么您的脚本可能会出乎意料地行为。这样的日期可能在您不期望的地方匹配。

此外,包含斜线(/)字符的日期将为您的sed命令引起问题。

相关内容

  • 没有找到相关文章

最新更新