嵌套的If-else问题

时间:2014-05-28 16:49:05

标签: bash shell search if-statement

我想做以下事情:

  1. 对于CUBE中的所有多维数据集名称,请检查是否存在.zip文件 ($ {C} 28052014.zip)目录/ data / testing / CUBE_Name /如果是 然后回应回声"' $ C',' SUCCESS'"
  2. 如果没有,那么对于找不到.zip文件的所有多维数据集名称 点1,检查字符串文件是否被截断'是 在目录下各自的.log文件($ C.log)中 / archive / logs / CUBE_Name /如果是,则回复"' $ C',' TRUNCATED'"
  3. 如果没有,则为所有未找到字符串的多维数据集名称 Point-2,echo"' $ C',' FAILED'"
  4. 我已经创建了如下脚本:

    #!/bin/sh
    CUBE="DAPP TAPP PAPP CAPP"
    
    for C in $CUBE
    do
    cd /data/testing/$C/
    
    test -f ${C}28052014.zip
    
    if [ $? -eq 0 ]
    then
    
            echo "'$C','SUCCESS'" >> /data/testing/out.log
    else
    cd /archive/logs/$C/
    
    if grep -q 'files have been truncated' $C.log;
    then
    
           echo "'$C','TRUNCATED'" >> /data/testing/out.log
    else
           echo "'$C','FAILED'" >> /data/testing/out.log
    
    fi
    fi
    done
    

    我面临的问题是......

    我的脚本反复检查所有多维数据集名称以执行上述3点中提到的工作,这是不可取的。它应该排除在上一步中所需测试成功的多维数据集名称,并且应该只查看对于最后一步测试不成功的立方体。

1 个答案:

答案 0 :(得分:3)

轻微简化。根本不需要嵌套(即elif,但如果你想要它,请保留它)。间距并不重要,但试图使其更具可读性,并且我不会使用资本变量来避免与环境变量发生冲突。

#!/bin/sh
cube="DAPP TAPP PAPP CAPP"

for c in $cube
do
  if [ -f "/data/testing/$c/${c}28052014.zip" ]
  then
    echo "'$c','SUCCESS'" >> /data/testing/out.log
  else
    if grep -q 'files have been truncated' "/archive/logs/$c/$c.log"
    then
      echo "'$c','TRUNCATED'" >> /data/testing/out.log
    else
      echo "'$c','FAILED'" >> /data/testing/out.log
    fi
  fi
done