массив значений ключа сценария bash в файле "etc/passwd"

Я хочу, чтобы мой файл /etc/passwdбыл в виде массива, подобного этому

[user_id] => [home_directory]

например.

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

поэтому после этого я могу установить условие, что если user_id больше 999 (это означает обычных пользователей), то проверить, есть ли в файле .htaccessего каталога значения memory_limitи display_errorsсуществуют или нет.

Для вышеупомянутой цели я выполнил команду ниже

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

показывает все

user_id home_directory

, но я не знаю, как поместить их в упомянутый ранее массив.

поскольку у некоторых пользователей в /etc/passwdнет домашнего каталога, мои ключи массива получают неверные значения.

помогите.

Заранее спасибо.

0
17.06.2020, 03:28
2 ответа

Вы можете использовать массив оболочки

# 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"
0
18.03.2021, 23:26

Попробуйте это

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

Теги

Похожие вопросы