如何testing两个文件是否存在?

我想检查两个文件是否存在,但我越来越

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 

Solutions Collecting From Web of "如何testing两个文件是否存在?"

尝试添加一个额外的方括号。

 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兼容的shell,您需要:

 [ -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 [与||相同 运营商。 如果您需要更多信息,请通过此链接

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