"etc/passwd" 파일에 키 값 배열을 쓰는 bash 스크립트

"etc/passwd" 파일에 키 값 배열을 쓰는 bash 스크립트

/etc/passwd파일이 다음과 같은 배열이기를 원합니다.

[사용자ID] => [홈디렉토리]

예를 들어

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

그런 다음 user_id가 999(일반 사용자를 의미)보다 큰 경우 .htaccess file해당 디렉터리에 sum 값이 있는지 확인하는 조건을 설정할 수 있습니다.memory_limitdisplay_errors

위의 결과를 달성하기 위해 다음 명령을 실행했습니다.

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

그것은 모두를 보여줍니다

user_id home_directory

하지만 이전에 언급한 배열에 어떻게 넣는지 모르겠습니다.

일부 사용자에게는 /etc/passwd홈 디렉터리가 없기 때문에 배열 키에 잘못된 값이 표시됩니다.

도와주세요.

미리 감사드립니다.

답변1

쉘 배열을 사용할 수 있습니다

# 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

관련 정보