Остальные ответы выглядят хорошо для меня, но я должен был попробовать это просто, чтобы увидеть.Это работает для меня:
file1=a.txt
file2=b.txt
file3=c.txt
if [[ -s ${file1} && -s ${file2} && -s ${file3} ]]
then
echo "present"
echo "Perform analysis"
else
echo "not present";
for name in ${file1} ${file2} ${file3}
do
if [[ ! -s ${name} ]]
then
date > ${name} # put something there so it passes next time
echo "just created ${name}"
fi
done
echo "skip";
fi
Я поместил это в файл с именем checkMulti.sh и получил следующий вывод:
$ ksh checkMulti.sh
not present
just created a.txt
just created b.txt
just created c.txt
skip
$ ksh checkMulti.sh
present
Perform analysis
$ rm a.txt
$ ksh checkMulti.sh
not present
just created a.txt
skip
$ ksh checkMulti.sh
present
Perform analysis
Использование одиночных скобок [ушло с помощью ksh 88. Я предлагаю всегда использовать двойной [[в эти дни.
Кроме того, убедитесь, что у вас есть пробелы до и после скобок и перед тире.Я просто попытался воспроизвести вашу ошибку и получил (это неправильно):
$ if [[-s fail]] #<<< missing space before -s and after filename
> then
> echo yes
> fi
-ksh: [[-s: not found [No such file or directory]
$
Но если я вставлю нужные места (и создаю файл), я получу:
$ date > good # put something in a file
$ if [[ -s good ]]
> then
> echo yes
> fi
yes
$