Script para validar o diretório inicial

0

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?

    
por DanMan3395 05.07.2018 / 19:38

3 respostas

2
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
    
por 05.07.2018 / 19:42
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

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
    
por 05.07.2018 / 19:45
0

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
    
por 05.07.2018 / 19:43