我想檢查是否存在這兩個文件,但我正在逐漸如何測試兩個文件是否存在?
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
我想檢查是否存在這兩個文件,但我正在逐漸如何測試兩個文件是否存在?
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
它特別是'[['(不含空格),而不是'[['(帶空格)「。無論出於何種原因,當我看到這個答案時,我認爲空間是可以的,但他們不是! – gusterlover6
[ -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只檢查文件是退出或not.If退出,其返回true.else,它返回false。
-f也做同樣的事情,但它檢查給定的文件是否是普通文件或不是。基於它返回true/false。
然後你正在使用& &。所以,它需要兩個[[..]]括號來執行。
改爲您可以使用-a [與& &運算符相同] -o [與||相同]運營商。 如果您需要更多信息,請通過此鏈接
如果您使用'測試'而不是'[',問題更加明顯。 「如果測試-f .ssh/id_rsa && test -f .ssh/ir_rsa.pub;那麼」工作得很好。 –