ln -s软连接文件算文件吗

场景:linux

开发A在windows环境下完成了开发,配置管理员cm搭建jenkins在centos环境下编译,cm编译失败,可是开发A在他的windows环境下能够编译过,最后发现是某几个so文件的软连接方式不同致使的,在linux上编译,须要从新使用ln -s 来设置软连接,此处,咱们不关注windows是如何设置软连接的。shell

此时好比/root/third/目录下有文件:windows

libffpeg.socentos

libffpeg.so.12.11测试

其中libffpeg.so是软连接,软连接的原始文件是libffpeg.so.12.11,若是直接执行ln -s libffpeg.so.12.11 libffpeg.so 会直接报错libffpeg.so已经存在,必须删除之后才能执行成功,此时,shell脚本,咱们会这样写:spa

#!/bin/sh
if [ -f libffpeg.so ] ; then
    rm libffpeg.so
    ln -s libffpeg.so.12.11 libffpeg.so
fi对象

你会发现这个if彻底没有执行,咱们用的是 “ -f ”参数来判断这个软连接文件是否存在,那么软连接文件是否是一个文件呢,其实软连接文件不能说是一个文件,只能算一种符号连接,因此使用“-f ” 来判断文件是不行的,应该使用 “ -L”来判断指定的是否为符号连接,正确的写法以下:blog

#!/bin/sh
if [  -L libffpeg.so ] ; then
    rm libffpeg.so
    ln -s libffpeg.so.12.11 libffpeg.so
fi开发

结果显示以下:jenkins

 

参考 if的条件判断以下:

-d :判断指定的是否为目录-z:判断指定的变量是否存在值-f:判断指定的是否为文件-L:判断指定的是否为符号连接-r:判断指定的是否可读-w:判断指定的是否可写-x:判断存在的对象是否能够执行!:测试条件的否认符号 

相关文章
相关标签/搜索