2017-02-09 46 views
0

由於某種原因,我的if condition對於不存在的文件和目錄未正確處理。腳本認爲文件和目錄不存在時就存在。如果目錄和文件存在,Bash腳本不能正確檢查

#!/usr/bin/bash 
lockdir=/opt/someOtherDis/qa_test_lock 
puppetlock=/var/opt/puppetLockDirs/agent_catalog_run.lock 

if [ ! -f "$puppetlock" ] && [ ! -d "$lockdir"]; then 
    #Get a url and grep it to get stuff 
else 
    su -c "echo ls puppetlock results: $(ls -lrt $puppetlock) and qa lock results: $(ls -lrt $lockdir) >> /var/log/dirStuff/test-qa-run.log" -m "someUser" 
    su -c "echo $(date +\"%m-%d-%T\") Puppet or QA tests are running. Did not attempt to update artifact version. >> /var/log/dirStuff/test-qa-run.log" -m "someUser" 
fi 

我加了ls的輸出,以確保我可以看到,如果傀儡或QA鎖存在。

這裏是日誌文件的輸出,首先檢查是什麼時候手動運行puppet,這樣我就可以確保工作。

02-09-08:16:01 Puppet或QA測試正在運行。沒有嘗試 更新神器版本。 LS puppetlock結果:-rw-R - R-- 1根根 5 2月9日8點27個/var/opt/lib/pe-puppet/state/agent_catalog_run.lock和 QA鎖結果:

02 -09-08:28:01木偶或QA測試正在運行。 沒有嘗試更新工件版本。

08年2月9日:30:02 app_versions.json尚未在最後30個分鐘LS改性 puppetlock結果:和QA鎖結果:

08年2月9日:30:02木偶或QA 測試正在運行。沒有嘗試更新神器版本。 ls puppetlock結果:和qa鎖定結果:

02-09-08:32:01傀儡或QA 測試正在運行。沒有嘗試更新神器版本。

+4

「'$ lockdir」'和']'之間應該有一個空格,不是? – AlexP

+0

@AlexP你是對的。難怪我看不到它。問題已修復 – wiredniko

回答

1

嗯,好像你的意思是寫:

if [ ! -f "$puppetlock" ] || [ ! -d "$lockdir" ]; then 

哪個(IMO)更明確寫道:

if ! test -f "$puppetlock" -a -d "$lockdir"; then 

if ! { test -f "$puppetlock" && test -d "$lockdir"; } then 

(注意!a || !b相當於!(a && b),但不是sa我爲!a && !b