我试图创建三个测试条件,以便在目录上设置diretory和用户及组帐户权限 - 当我使用下面的脚本和-a来包含它们并且它们没有被选中时 - 如果我单独执行它们他们工作 - 我哪里错了?
#!/bin/bash
if [ $(stat -c "%a" /wwwserver/virtual_hosts/www.test1.com) != "750" -a $(stat -c "%U" /wwwserver/virtual_hosts/www.test1.com) != "user" -a $(stat -c "%G" /wwwserver/virtual_hosts/www.test1.com) != "group" ] ;
then echo -e "\n\nDirectory Permissions Changed\n" $(stat /wwwserver/virtual_hosts/www.test1.com) "\n" "\nChanging Permissions back to 750 user group\n" | mail -s " Directory Permissions Changed for www.test1.com" mail@test1.com;
chmod 750 /wwwserver/virtual_hosts/www.test1.com;
chown -R user.group /wwwserver/virtual_hosts/www.test1.com;
fi
答案 0 :(得分:2)
基本上你的脚本有效,请检查:
touch "test1.com"
chmod 400 "test1.com"
if [ $(stat -c "%a" "test1.com") != "750" -a $(stat -c "%U" "test1.com") != "user" -a $(stat -c "%G" "test1.com") != "group" ]
then
echo "do something ..."
fi
这会输出do something ...
。
在你的情况下,看起来三个条件中的一个确实失败了。意味着文件权限已经750
或所有权已设置为user
,或者群组所有权设置为group
。
顺便说一下,我强烈建议正确引用命令替换。这是因为从该命令返回的输出可能包含有问题的字符,否则将由shell解释。关注shell脚本编写过程中的任何情况下的引用,无论您可能期望输出什么 - >猪可以飞!
以上是上面的例子 - 正确引用:
touch "test1.com"
chmod 400 "test1.com"
if [ "$(stat -c "%a" "test1.com")" != "750" -a "$(stat -c "%U" "test1.com")" != "user" -a "$(stat -c "%G" "test1.com")" != "group" ]
then
echo "do something ..."
fi
答案 1 :(得分:1)
您可以使用多种类似的条件:
s='abc'
n=4
m=5
[[ -n "$s" && $n > 3 && $m > 6 ]] && echo "all conditions passed"
all conditions passed
即。对所有条件使用[[...]]
,并使用&&
进行anding。