由于某些原因,我的if condition
文件和目录不存在未正确处理。该脚本认为文件和目录存在时不存在。
#!/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根root 2月9日08:27 /var/opt/lib/pe-puppet/state/agent_catalog_run.lock和 qa锁定结果:
02-09-08:28:01 Puppet或QA测试正在运行。难道 不要尝试更新工件版本。
08年2月9日:30:02 app_versions.json在过去30分钟内没有被修改过 puppetlock结果:和qa锁定结果:
02-09-08:30:02 Puppet或QA 测试正在运行。没有尝试更新工件版本。 LS puppetlock结果:和qa锁定结果:
02-09-08:32:01 Puppet或QA 测试正在运行。没有尝试更新工件版本。
答案 0 :(得分: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)
,但与!a && !b
不同)