如何检查是否存在符号链接

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

我正在检查bash中是否存在符号链接。。

mda=/usr/mda
if [ ! -L $mda ]; then
  echo "=> File doesn't exist"
fi


mda='/usr/mda'
if [ ! -L $mda ]; then
  echo "=> File doesn't exist"
fi

然而,这是行不通的。如果“!”被遗漏了,它永远不会触发。如果“!”存在的话,它每次都会触发。

提问于
用户回答回答于

-L如果“文件”存在并且是一个符号链接(链接的文件可能存在也可能不存在),则返回true。你想-f(如果文件存在且是常规文件,则返回true),或者只是-e(如果文件存在,则返回true,而不管文件的类型如何)。

根据GNU手册,-h是相同的-L,但是根据BSD手册,不应使用:

-h file如果文件存在并且是一个符号链接,则为true。为了与此程序的以前版本兼容,保留此操作符。不要依赖它的存在,而要使用-L。

用户回答回答于

-L是对文件存在的测试,并且是符号链接

如果不想测试文件是否是符号链接,而是测试它是否存在,而不管它的类型(文件、目录、套接字等),那么使用-e。

因此,如果文件实际上是文件,而不仅仅是一个符号链接,那么执行所有这些测试,并获得一个退出状态,其值指示错误条件。

if [ ! \( -e "${file}" \) ]
then
     echo "%ERROR: file ${file} does not exist!" >&2
     exit 1
elif [ ! \( -f "${file}" \) ]
then
     echo "%ERROR: ${file} is not a file!" >&2
     exit 2
elif [ ! \( -r "${file}" \) ]
then
     echo "%ERROR: file ${file} is not readable!" >&2
     exit 3
elif [ ! \( -s "${file}" \) ]
then
     echo "%ERROR: file ${file} is empty!" >&2
     exit 4
fi

扫码关注云+社区