linux meaning 如何測試是否存在兩個文件?




linux export用法 (4)

我想檢查兩個文件是否存在,但我得到了

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

[ -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 [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]]; then

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





bash