실제 사용자 이름이 인수로 사용될 때 사용자의 홈 디렉터리 경로를 표시하고, 해당 시스템에 존재하지 않는 사용자 이름이 인수로 사용될 때 사용자를 찾을 수 없거나 무언가를 표시하는 간단한 Bash 스크립트를 작성하고 싶습니다.
이 기능이 필요합니까? 스크립트 파일에서 기본 GNU 호환 명령을 사용하여 이 작업을 수행할 수 있습니까?
답변1
read -p "Enter a username: " username
if getent passwd "$username" > /dev/null
then
printf "Their home directory is: %s\n" "$(getent passwd "$username" | cut -d: -f6)"
else
printf "User not found!\n" >&2
fi
답변2
#!/bin/sh
username=$1
if ! getent passwd "$username" >/dev/null 2>&1; then
printf 'User %s does not exist\n' "$username"
exit 1
fi
homedir=$( getent passwd "$username" | cut -d: -f6 )
if [ -n "$homedir" ]; then
if [ -d "$homedir" ]; then
printf 'User %s has a valid (existing) home directory: %s\n' "$username" "$homedir"
else
printf 'User %s lacks a valid (existing) home directory: %s\n' "$username" "$homedir"
fi
else
printf 'User %s has no home directory\n' "$username"
fi
이 스크립트는 명령줄에서 사용자 이름을 가져옵니다.
$ ./script.sh kk
User kk has a valid (existing) home directory: /home/kk
$ ./script.sh nobody
User nobody lacks a valid (existing) home directory: /nonexistent
$ ./script.sh aoae
User aoae does not exist
답변3
getent passwd <USERNAME>
사용자 데이터베이스를 읽는 좋은 방법입니다. 사용자가 존재하는 경우 해당 사용자에 대한 사용자 데이터베이스의 항목을 인쇄하고, 사용자가 존재하지 않는 경우 0이 아닌 값으로 종료합니다.
따라서 출력이 0으로 종료되는지 확인하고 0이 아닌 값으로 종료되면 오류 메시지를 인쇄할 수 있습니다.
홈 디렉토리는 passwd 항목의 6번째 필드입니다. 와 같은 표준 텍스트 처리 도구를 사용하여 awk
추출할 수 있습니다 cut
.
if passwd="$(getent passwd "$user")"; then
awk -F: '{print $6}' <<<"$passwd"
else
echo "No such user $user" >&2
fi