ホームディレクトリを確認するスクリプト

ホームディレクトリを確認するスクリプト

実際のユーザー名が引数として使用されているときにユーザーのホームディレクトリパスを表示し、そのシステムに存在しないユーザー名が引数として使用されているときにユーザーが見つからないか何かを表示する単純な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>ユーザーデータベースを読むのに最適な方法です。ユーザーが存在する場合はそのユーザーのユーザーデータベースのエントリを印刷し、ユーザーが存在しない場合はゼロ以外の値で終了します。

したがって、出力がゼロで終了することを確認し、ゼロ以外の値で終了した場合は、エラーメッセージを印刷できます。

ホームディレクトリはpasswdエントリの6番目のフィールドです。などの標準テキスト処理ツールを使用してawk抽出できますcut

if passwd="$(getent passwd "$user")"; then
    awk -F: '{print $6}' <<<"$passwd"
else
    echo "No such user $user" >&2
fi

関連情報