Mac でユーザを追加するコマンド(スクリプト)
ユーザを作成するスクリプト create_user.sh です。
使用例
$ # 作成 $ sudo sh create_user.sh new_user_name password $ $ # 削除 $ sudo dscl . -delete /Users/new_user_name
実際のコード
create_user.sh
username=${1} password=${2} primary_group_id=20 # unique_id=601 # Get UniqueID which is over 601... unique_id=601 list_of_sorted_uid=$(dscacheutil -q user | grep uid | awk '{print $2}' | sort -n) while read existing_unique_id do if test ${existing_unique_id} -eq ${unique_id}; then unique_id=$(expr ${unique_id} + 1) elif test ${existing_unique_id} -gt ${unique_id}; then break fi done <<< "${list_of_sorted_uid}" # Create a new user... sudo dscl . -create /Users/${username} sudo dscl . -create /Users/${username} RealName ${username} sudo dscl . -create /Users/${username} UniqueID ${unique_id} sudo dscl . -create /Users/${username} PrimaryGroupID ${primary_group_id} sudo dscl . -create /Users/${username} NFSHomeDirectory /Users/${username} sudo dscl . -create /Users/${username} UserShell /bin/bash sudo dscl . -passwd /Users/${username} ${password} sudo createhomedir -b -u ${username}
補足
PrimaryGroupID に 20 を指定している理由
my_user$ # 自分の PrimaryGroupID を確認 my_user$ dscl . read /Users/my_user | grep PrimaryGroupID PrimaryGroupID: 20 my_user$ my_user$ # PrimaryGroupID が 20 のグループを確認 my_user$ dscl . search /Groups PrimaryGroupID 20 macports PrimaryGroupID = ( 20 ) staff PrimaryGroupID = ( 20 ) my_user$ # macports, staff がヒット。 my_user$ # 2つヒットしていいのか(。-`ω-)ンー
UniqueID を 601 以上で取得しようとしている理由
ソートした UniqueID の一覧を表示させたら、600番台以降が存在しなかったから。
$ dscacheutil -q user | grep uid | awk '{print $2}' | sort -n -2 -2 0 0 1 1 ... (中略) 238 239 239 500 501 502 $ # なんか uid も重複して存在してるけどいいのか(。-`ω-)ンー
自分の uid を確認する方法
$ dscacheutil -q user | grep myusername -A 5 uid: 502 gid: 20 dir: /Users/myusername shell: /bin/bash gecos: My User Name
PrimaryGroupID が 20 のユーザ一覧。
$ # dscl . search /Users key value $ dscl . search /Users PrimaryGroupID 20 | grep PrimaryGroupID | awk '{print $1}'
参考にしたサイト
Mac OS Xでコマンドラインからユーザーを作成する
ほぼ、これを参考にした。
MacOSX Leopard のユーザ作成・削除は dscl コマンド - ねもぷらす
最後のほうに削除についての記載あり。
File Not Found
じつはこっちのほうが詳しいかも。
osx - How to add user to a group from Mac OS X command line? - Super User
もっと、じつは dseditgroup コマンドを使うといいのかもしれない。
osx - What does update_terminal_cwd do in the terminal of OS X - Ask Different
sudo が面倒だから su ではいろうとすると update_terminal_cwd みたいなワーニングがでてきて断念。
パスワード入力なしで sudo コマンドを実行する方法
特定のコマンドをパスワードなしでsudo する設定 - Slow Dance
sudo dscl にパスワードをいれなくても良い設定をいれて妥協。
シェルスクリプト最大の罠、while問題 (2/2) - @IT
Bash variable scope - Stack Overflow
Bash - パイプ出力を**現在のシェル**上のwhileに喰わせる上手いやり方 - Qiita
パイプでWhile文にわたすと別プロセスが起動しちゃうから
変数のスコープが違ってくるとか...