我试图检查一个符号链接是否存在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
然而,这并不奏效。 如果”!'被省略,它永远不会触发。如果‘!’,它每次都会触发。
我试图检查一个符号链接是否存在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
然而,这并不奏效。 如果”!'被省略,它永远不会触发。如果‘!’,它每次都会触发。
当前回答
首先你可以这样做: mda = " / usr / mda” 如果[!-L "${mda}"];然后 echo "=>文件不存在" fi 如果你想用更高级的风格,你可以这样写: #!/bin/bash mda = " $ 1 " If [-e "$1"];然后 如果[!-l "$1"] 然后 返回“您的条目不是符号链接” 其他的 返回“您的条目是符号链接” fi 其他的 echo "=>文件不存在" fi
上述结果如下:
root@linux:~# ./sym.sh /etc/passwd
you entry is not symlink
root@linux:~# ./sym.sh /usr/mda
your entry is symlink
root@linux:~# ./sym.sh
=> File doesn't exist
其他回答
-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
如果你测试文件是否存在,你需要-e而不是-L。-L测试符号链接。
你可以用以下方法检查符号链接是否存在并且它没有被破坏:
[ -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
-L测试是否有符号链接,断开与否。通过结合使用-e,可以测试链接是否有效(指向目录或文件的链接),而不仅仅是它是否存在。
首先你可以这样做: mda = " / usr / mda” 如果[!-L "${mda}"];然后 echo "=>文件不存在" fi 如果你想用更高级的风格,你可以这样写: #!/bin/bash mda = " $ 1 " If [-e "$1"];然后 如果[!-l "$1"] 然后 返回“您的条目不是符号链接” 其他的 返回“您的条目是符号链接” fi 其他的 echo "=>文件不存在" fi
上述结果如下:
root@linux:~# ./sym.sh /etc/passwd
you entry is not symlink
root@linux:~# ./sym.sh /usr/mda
your entry is symlink
root@linux:~# ./sym.sh
=> File doesn't exist
这个文件真的是一个符号链接吗?如果不是,通常的存在性测试是-r或-e。
见人测试。