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文にわたすと別プロセスが起動しちゃうから
変数のスコープが違ってくるとか...

(Linux)シェルスクリプトで変数に改行を含めたい : 3流プログラマのメモ書き
これも大事。