Подтвердить что ты не робот

Как проверить, существуют ли два файла?

Я хотел бы проверить, существуют ли оба файла, но я получаю

test.sh: line 3: [: missing `]'

Может ли кто-нибудь увидеть, что не так?

#!/bin/sh

if [ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]; then
   echo "both exist"
else
   echo "one or more is missing"
fi
4b9b3361

Ответ 1

Попробуйте добавить дополнительную квадратную скобку.

if [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]]; then

Ответ 2

[ -f .ssh/id_rsa -a -f .ssh/id_rsa.pub ] && echo both || echo not

или

[[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]] && echo both || echo not

также, если вы для решения [[ ]], вы, вероятно, захотите изменить #!/bin/sh на #!/bin/bash в соответствии с вашим тегом вопроса.

Ответ 3

[[ представляет собой bash -специфический синтаксис. Для POSIX-совместимых оболочек вам необходимо:

[ -f file1 ] && [ -f file2 ]

Ответ 4

if [ -e .ssh/id_rsa -a -e .ssh/id_rsa.pub ]; then
 echo "both exist"
else
 echo "one or more is missing"
fi

Здесь

-e проверить только, что файл выходит или нет. Если выйдет, он возвращает true.else, он возвращает false.

-f также делает то же самое, но проверяет, является ли данный файл обычным файлом или нет. Основанный на том, что он возвращает true/false.

Затем вы используете & &. Так что, для выполнения нужно два [[..]] скобки.

вместо этого вы можете использовать -a [тот же, что и && оператор] -o [тот же, что и || оператор]. Если вам нужна дополнительная информация, перейдите по этой ссылке

http://linux.die.net/man/1/bash.