如果在KornShell脚本语句

我有下面的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 

有关这个的任何见解?

这是检查文件的危险方法。 如果您碰巧在该目录中有多个匹配项,那么它将不起作用,因为每个文件都将成为一个单独的参数,这与文本的语法不匹配。 一个更好的(虽然不是万无一失)的方式是这样的:

 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 

我怀疑你需要这个测试一些文件传输或报告生成脚本的成功(我关闭?)。 我会这样做的方式(可能不是最好的,但它应该工作)是这样的:

 #!/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 

这将返回成功的文件模式,你正在寻找的是在脚本的目录中找到。 你可以改变./当然文件的完整路径…