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