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”,“截断” 如果不是,那么对于在中找不到字符串的所有多维数据集名称
#!/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次。