在KornShell脚本中的if语句

时间:2011-10-17 03:53:21

标签: linux shell unix ksh

我有以下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

对此有何见解?

2 个答案:

答案 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

当您在脚本目录中找到您要查找的文件模式时,这将返回成功。您可以更改./作为文件的完整路径...