bash 脚本在“etc/passwd”文件中编写键值数组

bash 脚本在“etc/passwd”文件中编写键值数组

我希望我的/etc/passwd文件是这样的数组

[用户 ID] => [主目录]

例如

[0]      =>  "/root"
[1000]   =>  "/home/user1"
[1001]   =>  "/home/user2"

所以之后,我可以设置一个条件,如果 user_id 大于 999(这意味着普通用户),则检查其目录中和.htaccess file的值是否存在。memory_limitdisplay_errors

为了实现上述目标,我运行了以下命令

cat /etc/passwd | awk -F':' '{print $4,$6}'

它显示了所有

user_id home_directory

但我不知道如何将它们放入我之前提到的数组中。

因为某些用户/etc/passwd没有主目录,所以我的数组键得到了错误的值。

请帮忙。

提前致谢。

答案1

您可以使用 shell 数组

# Associative array p
declare -A p=()

# Populate the array (x is a placeholder that we otherwise ignore)
while IFS=: read -r x x uid x x home x
do
    p[$uid]=$home
done </etc/passwd

# Demonstrate the data
for uid in "${!p[@]}"
do
    printf "[%s]\t=> \"%s\"\n" "$uid" "${p[$uid]}"
done

输出示例

[1000]  => "/home/pi"
[0]     => "/root"
[1]     => "/usr/sbin"
[33]    => "/var/www"

答案2

尝试这个

IFS=$'\n'  
user=( $(awk -F':' '{print $4}' /etc/passwd | tr '\n' ' ') )  
homeDir=( $(awk -F':' '{print $6}' /etc/passwd |tr '\n' ' '))  
unset IFS

相关内容