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
Eu quero escrever um script Bash simples que exibe o caminho para o diretório inicial de um usuário quando um nome de usuário real é usado como um argumento e exibe o usuário não encontrado ou algo assim quando um nome de usuário que não existe neste sistema é usado como um argumento.
Isso exigiria uma função? Isso pode ser feito usando comandos compatíveis com GNU básicos em um arquivo de script?
#!/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
O script usa o nome de usuário na linha de comando:
$ ./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
getent passwd <USERNAME>
é uma boa maneira de ler o banco de dados do usuário. Ele imprime a entrada do banco de dados do usuário para o usuário especificado, se o usuário existir, ou sai de um valor diferente de zero se o usuário não existir.
Portanto, podemos ver a saída se ela sair de zero e imprimir uma mensagem de erro se ela sair de zero.
O diretório inicial é o sexto campo da entrada passwd. Pode ser extraído usando ferramentas de processamento de texto padrão, e. awk
ou cut
.
if passwd="$(getent passwd "$user")"; then
awk -F: '{print $6}' <<<"$passwd"
else
echo "No such user $user" >&2
fi
Tags bash users shell-script home