Bash 嵌套If-else问题

Bash 嵌套If-else问题,bash,shell,search,if-statement,Bash,Shell,Search,If Statement,我想做以下几件事: 对于多维数据集中的所有多维数据集名称,请检查是否存在.zip文件 目录/data/testing/CUBE_Name/if yes下的(${C}28052014.zip) 然后回显“$C”,“成功” 如果没有,那么对于在中找不到.zip文件的所有多维数据集名称 第1点,检查字符串“文件已被截断”是否正确 在各自的.log文件($C.log)的目录下 /归档/logs/CUBE_Name/如果是,则回显“$C”,“截断” 如果不是,那么对于在中找不到字符串的所有多维数据集名称

我想做以下几件事:

  • 对于多维数据集中的所有多维数据集名称,请检查是否存在.zip文件 目录/data/testing/CUBE_Name/if yes下的(${C}28052014.zip) 然后回显“$C”,“成功”
  • 如果没有,那么对于在中找不到.zip文件的所有多维数据集名称 第1点,检查字符串“文件已被截断”是否正确 在各自的.log文件($C.log)的目录下 /归档/logs/CUBE_Name/如果是,则回显“$C”,“截断”
  • 如果不是,那么对于在中找不到字符串的所有多维数据集名称 第2点,回显“$C”,“失败”
  • 我已经创建了我的脚本,如下所示:

    #!/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点中提到的工作,这是不需要的。它应该排除在上一步中要求的测试已成功的多维数据集名称,并且应该只查找在上一步中测试未成功的多维数据集。

    略微简化。实际上根本不需要嵌套(即
    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
    

    稍微简化一下。实际上根本不需要嵌套(即
    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
    

    稍微简化一下。实际上根本不需要嵌套(即
    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
    

    稍微简化一下。实际上根本不需要嵌套(即
    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
    

    什么是
    #/bin/sh
    在您的系统上?另外,似乎只需使用
    if[-f full_path]
    即可简化cd/测试/退出状态检查。那么什么是28052014美元邮政编码?因为大多数shell都会假设它是一个变量。我关心的是
    $C$28052014.zip
    。第二个
    $
    将导致bash替换28052014命令行参数。我想你想要
    ${C}28052014.zip
    @chrisaycock对不起..那是个打字错误..更正了.什么是
    #/bin/sh
    在您的系统上?另外,似乎只需使用
    if[-f full_path]
    即可简化cd/测试/退出状态检查。那么什么是28052014美元邮政编码?因为大多数shell都会假设它是一个变量。我关心的是
    $C$28052014.zip
    。第二个
    $
    将导致bash替换28052014命令行参数。我想你想要
    ${C}28052014.zip
    @chrisaycock对不起..那是个打字错误..更正了.什么是
    #/bin/sh
    在您的系统上?另外,似乎只需使用
    if[-f full_path]
    即可简化cd/测试/退出状态检查。那么什么是28052014美元邮政编码?因为大多数shell都会假设它是一个变量。我关心的是
    $C$28052014.zip
    。第二个
    $
    将导致bash替换28052014命令行参数。我想你想要
    ${C}28052014.zip
    @chrisaycock对不起..那是个打字错误..更正了.什么是
    #/bin/sh
    在您的系统上?另外,似乎只需使用
    if[-f full_path]
    即可简化cd/测试/退出状态检查。那么什么是28052014美元邮政编码?因为大多数shell都会假设它是一个变量。我关心的是
    $C$28052014.zip
    。第二个
    $
    将导致bash替换28052014命令行参数。我想你想要
    ${C}28052014.zip
    @chrisaycock对不起..那是个打字错误..更正了.很好!我将
    /data/testing/out.log
    放入变量中,而不是重复3次。很好!我将
    /data/testing/out.log
    放入变量中,而不是重复3次。很好!我将
    /data/testing/out.log
    放入变量中,而不是重复3次。很好!我将
    /data/testing/out.log
    放入变量中,而不是重复3次。