if [ -f "file1" -a -f "file2" -a "file3" ]; then
#some code
fi
[
- это команда, а не часть оператора if
. Поэтому вы должны передать ей каждый из соответствующих аргументов, а не пытаться выполнить ее некорректно, как вы сделали.
if [ arg1 arg2 arg3 arg4 ... ]
then
Вы можете увидеть оператор [...]
только как ярлык для test ...
. Параметры используются таким же образом.
Итак, в вашем случае вы можете написать способ ghostdog74 или:
if [ -f $input_file ] && [ -f $output_file ] && [ -f $log_file ]
then
### Some Code here
fi
Если вы используете двойные скобки Bash, вы можете сделать следующее:
if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]]
который я считаю более удобным для чтения, чем другие варианты, показанные здесь (но это субъективно) . Однако у него есть другие преимущества .
И, как показывает ghostdog74 , вы всегда должны заключать в кавычки переменные, содержащие имена файлов.