我想检查两个文件是否存在,但我得到了
test.sh: line 3: [: missing `]'
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到什么是错的?
#!/bin/sh
if [ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]; then
echo "both exist"
else
echo "one or more is missing"
fi
Run Code Online (Sandbox Code Playgroud)
Rag*_*ram 52
尝试添加额外的方括号.
if [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]]; then
Run Code Online (Sandbox Code Playgroud)
Mic*_*ker 30
[ -f .ssh/id_rsa -a -f .ssh/id_rsa.pub ] && echo both || echo not
Run Code Online (Sandbox Code Playgroud)
要么
[[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]] && echo both || echo not
Run Code Online (Sandbox Code Playgroud)
此外,如果您使用该[[ ]]
解决方案,您可能希望更改#!/bin/sh
为#!/bin/bash
符合您的问题标签.
jør*_*sen 13
[[
是特定于bash的语法.对于POSIX兼容的shell,您需要:
[ -f file1 ] && [ -f file2 ]
Run Code Online (Sandbox Code Playgroud)
if [ -e .ssh/id_rsa -a -e .ssh/id_rsa.pub ]; then
echo "both exist"
else
echo "one or more is missing"
fi
Run Code Online (Sandbox Code Playgroud)
这里,
-e只检查文件是否退出.如果退出,则返回true.else,返回false.
-f也做同样的事情,但它检查给定的文件是否是常规文件.基于它返回true/false.
然后你正在使用&&.所以,它需要两个[[..]]括号来执行.
相反,你可以使用-a [与&&运算符相同] -o [与||相同 运营商.如果您需要更多信息,请通过此链接
http://linux.die.net/man/1/bash.