оператор if в скрипте KornShell - PullRequest
       21

оператор if в скрипте KornShell

2 голосов
/ 17 октября 2011

У меня есть следующее заявление 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 ]

4 голосов
/ 17 октября 2011

Это опасный способ проверки файлов. Если в этом каталоге окажется несколько совпадений, это не сработает, поскольку каждый файл станет отдельным параметром, который не будет соответствовать синтаксису текста. Лучший (хотя и не надежный) способ сделать это так:

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 голос
/ 17 октября 2011

Я подозреваю, что вам это нужно, чтобы проверить успешность какого-либо сценария передачи файла или генерации отчета (я рядом?).Я бы сделал это (может быть, не самый лучший, но он должен работать) так:

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

Это вернется успешно, как только искомый шаблон файла будет найден в каталогесценарий.Вы можете изменить ./ для полного пути к файлам, конечно ...

...