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:判斷存在的對象是否能夠執行!:測試條件的否認符號 

相關文章
相關標籤/搜索