我写了一个脚本,检查wheel组的用户是否在允许用户列表中,如果true
,则将值0
写入列表result
,如果false,则1
。然后我发现了一段代码,可以检查结果列表中的所有值是否相同。我的问题是,当列表中没有用户时,他们都得到1
,这使得测试通过,而它应该失败
我需要什么?帮助进行代码审查,以使测试适用于以下情况:
result=(所有成员均为0)测试通过
结果=(至少一个成员有1)测试失败
结果=(所有成员均为1)测试失败
#!/bin/bash
source ./colorama.conf
message="verify group wheel members"
wheel_members_list=(
"username_01"
"username_02"
"username_03"
)
#echo ${wheel_members_list[@]}
output=`getent group wheel | awk -F: '{print $4}' | tr , '\n'`
#echo $output
result=()
for username in $output;do
if [[ ${wheel_members_list[@]} =~ (^|[[:space:]])$username($|[[:space:]]) ]];then
result+=(0)
else
result+=(1)
fi
done
echo state: ${result[@]}
if [ "${#result[@]}" -gt 0 ] && [ $(printf "%s\000" "${result[@]}" |
LC_ALL=C sort -z -u |
grep -z -c .) -eq 1 ] ; then
echo pass
exit 0
else
echo fail
exit 1
fi
编辑:目前我用if条件解决了它,但我会感谢第一个版本的帮助
for state in ${result[@]}; do
if [ $state -eq 1 ]; then
exit 1
fi
done
exit 0
1条答案
按热度按时间zbq4xfa01#
因为result是一个只有0和1的数组,你可以通过使用纯bash来最有效地做到这一点:
这种方式效率较低,但更符合你的尝试,你只需要使用grep在没有找到匹配时失败的事实: