Ответ 1
Попробуйте добавить дополнительную квадратную скобку.
if [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]]; then
Я хотел бы проверить, существуют ли оба файла, но я получаю
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
Попробуйте добавить дополнительную квадратную скобку.
if [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]]; then
[ -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
в соответствии с вашим тегом вопроса.
[[
представляет собой bash -специфический синтаксис. Для POSIX-совместимых оболочек вам необходимо:
[ -f file1 ] && [ -f file2 ]
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 [тот же, что и || оператор]. Если вам нужна дополнительная информация, перейдите по этой ссылке