Я хочу, чтобы мой файл /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
нет домашнего каталога, мои ключи массива получают неверные значения.
помогите.
Заранее спасибо.
Вы можете использовать массив оболочки
# 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"
Попробуйте это
IFS=$'\n'
user=( $(awk -F':' '{print $4}' /etc/passwd | tr '\n' ' ') )
homeDir=( $(awk -F':' '{print $6}' /etc/passwd |tr '\n' ' '))
unset IFS