我想使用以下方式使用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
命令引起问题。