bash:我们确定计算机是否属于活动目录组,并根据此执行操作

问题描述 投票:0回答:1

有必要将自动关机任务分发到所有运行 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

代码无法正常工作。我找不到错误。

linux bash
1个回答
0
投票

现在您已经共享了数据内容,我们知道

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
存储的列表中。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.