有必要将自动关机任务分发到所有运行 Linux 的客户端计算机,除了某些 Active Directory 计算机 pan-sgg-dalas 组之外。我发现的最接近的东西在代码中,但它不起作用。
echo "set time, except group pan-sgg-dalas"
computer_name=$(hostname -s)
if getent group pan-sgg-dalas | grep -q "$computer_name"; then
echo "0 22 * * * root /sbin/shutdown -h now" > /etc/cron.d/shutdown_22:00
echo "set time 22:00"
else
echo "Computer belong to group pan-sgg-dalas."
fi
代码无法正常工作。我找不到错误。
现在您已经共享了数据内容,我们知道
group_members
看起来像 pan-sgg-dalas:*:1941423615:ws-pa-test-l001$,ws-pa-jeu-l004$,ws-pa-ukg-ktr$,ws-pa-arm-kszi$,ws-pa-ds-dis1$,ws-pa-ds-dis2$
这里有一些事情:首先,我们应该只取第四列;其次,我们需要用逗号分隔并删除尾随的
$
以获得适合精确匹配比较的内容。那么,让我们这样做吧:
# output of actual commands hardcoded to allow reproducibility
computer_name=ws-pa-sius-l002
group_members='pan-sgg-dalas:*:1941423615:ws-pa-test-l001$,ws-pa-jeu-l004$,ws-pa-ukg-ktr$,ws-pa-arm-kszi$,ws-pa-ds-dis1$,ws-pa-ds-dis2$'
group_members=${group_members##*:} # remove everything up to the last : in group_members
if [[ ",$group_members" = *,"$computer_name"$ ]]; then
echo "$computer_name is a group member" >&2
else
echo "$computer_name is NOT a group member" >&2
fi
运行时,我们得到
ws-pa-sius-l002 is NOT a group member
作为输出——但这是正确的! ws-pa-sius-l002
确实不在 group_members
存储的列表中。