如何检查符号链接是否存在
我试图检查一个符号链接是否存在于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
您可以检查符号链接的存在,并确保它不会被破坏:
[ -L ${my_link} ] && [ -e ${my_link} ]
所以,完整的解决方案是:
if [ -L ${my_link} ] ; then
if [ -e ${my_link} ] ; then
echo "Good link"
else
echo "Broken link"
fi
elif [ -e ${my_link} ] ; then
echo "Not a link"
else
echo "Missing"
fi
链接地址: http://www.djcxy.com/p/78101.html