我有以下if语句。当我在文件夹中同时包含csv文件和zip文件时,它会给我语法错误。但是当我单独使用csv文件或单独使用zip文件或者没有文件时,它可以正常工作。
我不确定导致下面命令中语法错误的原因是什么:
if [ -f ctf_error_report_??_????????????.csv -o -f ctf_error_report_??_????????????.???.zip ];
then
echo "Successful"
else
echo "Problem"
fi
exit 0
对此有何见解?
答案 0 :(得分:4)
这是检查文件的危险方法。如果您在该目录中碰巧有多个匹配,那么它将无法工作,因为每个文件将成为单独的参数,这与文本的语法不匹配。一个更好(虽然不是万无一失)的方法是这样的:
set ctf_error_report_??_????????????.csv
csv_file=$1
set ctf_error_report_??_????????????.???.zip
zip_file=$1
if [ -f "$csv_file" -o -f "$zip_file" ]
then
echo "Successful"
else
echo "Problem"
fi
答案 1 :(得分:1)
我怀疑你需要这个来测试一些文件传输或报告生成脚本的成功(我是否关闭?)。我这样做的方式(可能不是最好的,但应该有效)是这样的:
#!/bin/bash
FILE_FOUND=0
ls ./ctf_error_report_??_????????????.csv &>/dev/null
if [ $? -eq 0 ]; then
FILE_FOUND=1
fi
ls ./ctf_error_report_??_????????????.???.zip &>/dev/null
if [ $? -eq 0 ]; then
FILE_FOUND=1
fi
if [ $FILE_FOUND -eq 1 ]; then
echo "Successful"
else
echo "Problem"
fi
当您在脚本目录中找到您要查找的文件模式时,这将返回成功。您可以更改./作为文件的完整路径...