場景:
開發A在windows環境下完成了開發,配置管理員cm搭建jenkins在centos環境下編譯,cm編譯失敗,但是開發A在他的windows環境下可以編譯過,最后發現是某幾個so文件的軟鏈接方式不一樣導致的,在linux上編譯,需要重新使用ln -s 來設置軟鏈接,此處,我們不關注windows是如何設置軟鏈接的。
此時比如/root/third/目錄下有文件:
libffpeg.so
libffpeg.so.12.11
其中libffpeg.so是軟鏈接,軟鏈接的原始文件是libffpeg.so.12.11,如果直接執行ln -s libffpeg.so.12.11 libffpeg.so 會直接報錯libffpeg.so已經存在,必須刪除以后才能執行成功,此時,shell腳本,我們會這樣寫:
#!/bin/sh
if [ -f libffpeg.so ] ; then
rm libffpeg.so
ln -s libffpeg.so.12.11 libffpeg.so
fi
你會發現這個if完全沒有執行,我們用的是 “ -f ”參數來判斷這個軟鏈接文件是否存在,那么軟鏈接文件是不是一個文件呢,其實軟鏈接文件不能說是一個文件,只能算一種符號鏈接,所以使用“-f ” 來判斷文件是不行的,應該使用 “ -L”來判斷指定的是否為符號鏈接,正確的寫法如下:
#!/bin/sh
if [ -L libffpeg.so ] ; then
rm libffpeg.so
ln -s libffpeg.so.12.11 libffpeg.so
fi
結果顯示如下:
參考 if的條件判斷如下:
-d :判斷指定的是否為目錄
-z:判斷指定的變量是否存在值
-f:判斷指定的是否為文件
-L:判斷指定的是否為符號鏈接
-r:判斷指定的是否可讀
-w:判斷指定的是否可寫
-x:判斷存在的對象是否可以執行
!:測試條件的否定符號