sudoを実行しているユーザーの名前やIDを取得する方法

sudoで実行したシェルでは、「whoami」コマンドは「root」を返しますし、環境変数「$USER」にも「root」が設定されています。
また、「id -u」や「id -g」コマンドは、rootユーザーのユーザーID・グループIDである「0」を出力します。

$ sudo sh -c 'whoami'
root
$ sudo sh -c 'echo $USER'
root
$ sudo sh -c 'id -u'
0
$ sudo sh -c 'id -g'
0

しかし、シェルスクリプトなどで、sudoを実行しているユーザーの名前やIDを使いたいことがあります。
そんな時は、環境変数「$SUDO_USER」「$SUDO_UID」「$SUDO_GID」を使います。

$ sudo sh -c 'echo $SUDO_USER'
lintaro
$ sudo sh -c 'echo $SUDO_UID'
1000
$ sudo sh -c 'echo $SUDO_GID'
1000

シェルスクリプトで、sudoを使わずに実行した場合はユーザー名を、sudoを使って実行した時には「root」ではなくsudoを実行したユーザー名を変数に代入したい場合、以下のようにします。

USERNAME=${SUDO_USER:-$USER}

これは、「${VAR1:-VAR2}」と書くと、「$VAR1が未設定もしくは空でなければ$VAR1、そうでなければ$VAR2の値を展開する」と動作するためです。