【发布时间】: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的情况下运行它并修复所有错误。