我正在使用7za命令解压缩受密码保护的文件。 让我们考虑一个场景,我有一个文件谁的密码是mmyy的组合。 日期(mmyy)可以是当月,上个月或上个月。 例如1213或1113或1013(mmyy:格式) 下面是我写的示例代码片段
function currmonth
{
curr_mon=`echo $(date +%x)`
cyy=`echo $curr_mon| awk '{print substr($0,9,2)}'`
cmm=`echo $curr_mon| awk '{print substr($0,1,2)}'`
curr_pswd=`echo ${yy}${mm}`
}
function prevmonth
{
prev_mon=`echo $(date +%x -d 'last month')`
yy=`echo $prev_mon| awk '{print substr($0,9,2)}'`
mm=`echo $prev_mon| awk '{print substr($0,1,2)}'`
prev_pass=${yy}${mm}
}
function prev2month
{
prev2_mon=`echo $(date +%x -d '2 month ago')`
p2pyy=`echo $prev2_mon| awk '{print substr($0,9,2)}'`
p2pmm=`echo $prev2_mon| awk '{print substr($0,1,2)}'`
prev2mon_pass=${p2pyy}${p2pmm}
}
function IA_oper
{
files=`ls abc*.zip`
for eachfile in $files; do
if [expression];then
7za x -p$curr_pass $eachfile
elif [expression]; then
7za x -p$prev_pass $eachfile
elif [expression]; then
7za x -p$prev2mon_pass $eachfile
else
mailx -s" cannot be extracted" abc@xyz.com
fi
done
}
我想在if循环中执行它们,如果所有条件都失败,它会给我发错误 我不知道怎么做,请帮助我这个
答案 0 :(得分:0)
如果你想全部尝试,你的“条件”需要检查成功或失败,这是通过命令的退出状态报告的。在bash中,您可以使用变量$?
if [ $? -eq 0 ]; then
echo "Success!"
fi
在您的情况下,您希望在找到有效的密码后停止尝试新密码,因此请使用关键字continue
跳回到循环的下一次迭代。
for eachfile in $files; do
# Try each password, and move on as soon as we find one that works
7za x -p$curr_pass $eachfile
if [ $? -eq 0 ]; then
continue;
fi
7za x -p$prev_pass $eachfile
if [ $? -eq 0 ]; then
continue;
fi
7za x -p$prev2mon_pass $eachfile
if [ $? -eq 0 ]; then
continue;
fi
# Fallthrough. We get here only if all of the above failed.
mailx -s" cannot be extracted" abc@xyz.com
done
顺便说一句,您可以通过允许date
为您设置密码格式来保存一堆awk解析。告诉你你想要MMYY:
date +%m%y -d '2 month ago'