我想以下列方式使用Until循环命令,使用until循环,以便在条件为假时脚本不应该结束
#!/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%)
这里没有结束日期..并生成日志文件
答案 0 :(得分:1)
但我得到了这个输入
$ ./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
命令出现问题。