在unix中的if循环中提取受密码保护的文件

时间:2013-12-04 21:14:58

标签: linux bash unix ksh 7zip

我正在使用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 condition

循环它们
        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循环中执行它们,如果所有条件都失败,它会给我发错误 我不知道怎么做,请帮助我这个

1 个答案:

答案 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'