Closed2

/etc/passwdからuseraddコマンドを生成するシェルスクリプト

Junichi HashimotoJunichi Hashimoto

サーバー移行などユーザーのマイグレーションを想定。ChatGPTに書かせてみた。

migrate_users.sh
#!/bin/bash

#
# ユーザー情報を/etc/passwdから抽出し、useraddコマンドを生成するスクリプト
# 
# usage: ./migrate_users.sh
#   EXCLUDE_USERSを編集して、スクリプトを実行する
#   EXCLUDE_USERSに指定されたユーザーは除外される。
#

# 除外するユーザー名のリスト
EXCLUDE_USERS=("nobody" "nfsnobody" "ec2-user")

# 除外するUIDの最大値(通常、システムユーザーはUID < 1000)
MIN_UID=1000

# passwdファイルのパス
PASSWD_FILE="/etc/passwd"

# ファイルが存在するか確認
if [ ! -f "$PASSWD_FILE" ]; then
    echo "エラー: $PASSWD_FILE が見つかりません。"
    exit 1
fi

# 各行を処理
while IFS=: read -r username password uid gid comment home shell; do
    # 除外ユーザーか確認
    if [[ " ${EXCLUDE_USERS[@]} " =~ " ${username} " ]]; then
        continue
    fi

    # UIDがMIN_UID未満の場合は除外
    if [ "$uid" -lt "$MIN_UID" ]; then
        continue
    fi

    # useraddコマンドを生成
    echo "useradd -u $uid -g $gid -c '$comment' -d $home -s $shell $username"
done < "$PASSWD_FILE"
Junichi HashimotoJunichi Hashimoto

テスト。

次のユーザーを用意する。

sudo cat /etc/passwd | grep my-user
# my-user:x:1000:1000:User for test:/home/my-user:/bin/bash

migrate_users.shを実行すると、useraddコマンドが出力される。

chmod +x migrate_users.sh
./migrate_users.sh
# useradd -u 1000 -g 1000 -c 'User for test' -d /home/my-user -s /bin/bash my-user
このスクラップは2025/06/19にクローズされました