if语句中的多个否定表达式在bash脚本中不起作用

时间:2019-01-29 07:52:31

标签: bash

我正在尝试在下面的if语句中测试文件夹的所有权,目录和可写性,该语句是否按bash脚本中的预期工作

if [ -O ./testDir  -a  -d ./testDir  -a -w ./testDir ]
then
    echo "All is well"
else
    echo "All not ok"|  mail -s "Folder Issue" -r "xyz<xyz@xyz.com>" xyz@xyz.com 

fi

但是我想用下面的内容替换上面的if语句,但它不起作用;如果我在不同的if语句中测试每个条件,效果很好

if [ !  -O ./testDir  -a ! -d ./testDir  -a ! -w ./testDir ] 
then
    echo "All not ok"|  mail -s "Folder Issue" -r " xyz<xyz@xyz.com>" xyz@cisco.com 

fi

如果我做错了请帮助

2 个答案:

答案 0 :(得分:1)

not( expr1 and expr2 and expr3 )

De Morgan's laws等于:

(not expr1) or (not expr2) or (not expr3)

所以你应该选择:

if [ !  -O ./testDir -o ! -d ./testDir -o ! -w ./testDir ]

答案 1 :(得分:0)

插入!在以下情况之后:

if ! [ -O ./testDir  -a  -d ./testDir  -a -w ./testDir ]