【问题标题】:zsh script not emitting expected enable/disable outputzsh 脚本未发出预期的启用/禁用输出
【发布时间】:2022-10-21 20:20:44
【问题描述】:

我有以下 bash 脚本,在 Mac 中的每个用户登录中,我将检查安全令牌状态是否设置为启用。 然后我会用 grep -ic 命令来计算 enable 这个词出现了多少次。 然后,如果单词 enable 不等于 0,我将打印用户名和单词 enabled,否则禁用。 这是我得到的输出:

luigiMac
martaMac
provamacmarco:Disabled

这是脚本:

#!/usr/bin/env zsh

result=""
enabled="Enabled"
disabled="Disabled"
users=$(dscl . -list /Users | grep -v -e '_' -e root -e nobody -e daemon)

for item_ in "${users[@]}"; do
    newUsers+=("$item_")
    #echo $newUsers
done

for i in "${newUsers[@]}";do
#echo $i[4]
tokenStatus+=$(sysadminctl -adminUser "" -adminPassword "" -secureTokenStatus "$i" 2>&1 | grep -ic "enabled")
print $tokenStatus
if [[ "${tokenStatus[@]}" -ne 0 ]]
then
result="${i}:${enabled}"
echo "${result}"
else
result="${i}:${disabled}"
echo "${result}"
fi
done

#echo "${result}"

我不明白为什么脚本不为其他用户名打印启用或禁用。

【问题讨论】:

  • 你的shebang是zsh,但你声称你正在使用bash。哪一个是正确的?
  • 对不起,你是对的,正确的是zsh
  • users 不是数组;它只是一个带有嵌入式换行符的字符串。
  • 除了 chepner 正确所说的之外,newUsers 也不是一个数组,而只是一个字符串。但是,它在循环中使用,就好像它是一个数组一样。我认为整个脚本值得逐行仔细调试。尝试在打开set -x 的情况下运行它并修复所有错误。

标签: macos shell zsh


【解决方案1】:

我不是zsh 专家,但 IMO 你在脚本中做了很多不必要的事情;您可以通过以下方式简化一点:

dscl . -list /Users |
grep -vE -e '^_' -e '^(root|daemon|nobody)$' |
while IFS=$'
' read -r user
do
    if sysadminctl ... -secureTokenStatus "$user" 2>&1 |
       grep -q 'ENABLED'
    then
        result=Enabled
    else
        result=Disabled
    fi
    printf '%s:%s
' "$user" "$result"
done

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2013-12-25
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2021-10-13
    相关资源
    最近更新 更多