2017-02-09 2 views
0

По какой-то причине мой if condition для файла и каталога, который не существует, обрабатывается неправильно. Сценарий считает, что файл и каталог существуют, когда они этого не делают.Bash Script не проверяет правильность, если Directory и File Exist

#!/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, чтобы убедиться, что я могу увидеть, если марионетка или блокировка существует контроль качества.

Вот результат файла журнала, первая проверка была, когда я запускал марионетку вручную, чтобы я мог убедиться, что все работает.

02-09-08: 16: 01 Выполнены тесты на кукольный или QA. Не пыталась обновить версию артефакта . Результаты Ls puppetlock: -RW-R - r-- 1 корень корень 5 Feb 9 08:27 /var/opt/lib/pe-puppet/state/agent_catalog_run.lock и замок Результаты: QA

02 -09-08: 28: 01 Выполняются тесты Puppet или QA. не пытался обновить версию артефакта.

02-09-08: 30: 02 app_versions.json не был изменен в течение последних 30 минут Ls Результаты puppetlock: результаты и QA замок:

02-09-08: 30: 02 Кукольные или QA . Не пыталась обновить версию артефакта. ls Результаты кукольного стела: и результаты блокировки затвора:

02-09-08: 32: 01 Протест или QA Пробеги. Не пыталась обновить версию артефакта.

+4

Должно быть пространство между '' $ lockdir '' и ']', no? – AlexP

+0

@AlexP Вы правы. Неудивительно, что я не мог этого видеть. Проблема исправлена – wiredniko

ответ

1

Хм, кажется, что ты хотел написать:

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

Which (IMO) более четко написано:

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

или

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

(Обратите внимание, что !a || !b эквивалентно !(a && b), но не sa me as !a && !b)