Closed2
/etc/passwdからuseraddコマンドを生成するシェルスクリプト
サーバー移行などユーザーのマイグレーションを想定。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"
テスト。
次のユーザーを用意する。
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にクローズされました