---

title: シェルスクリプトで現在のユーザーが rootかどうかチェックする
description: root権限がないと実行できない処理を含むスクリプトは間違えて一般ユーザーで実行しないようにしておく
date: 2021-08-22
image: shell.png
tweet_url: https://twitter.com/shimariso/status/1429370732174184450
---

実行にroot権限を要する処理を含むシェルスクリプトをどう記述するかは、大きく分けて2種類考えられる。

- スクリプト自体がsudoで実行される前提でそのまま処理を記述する
- スクリプト内でroot権限の必要なコマンドにだけそれぞれ sudoを付ける

スクリプト内で実行されるほとんどのコマンドがroot権限を要する場合は前者の方法を取るのが簡単だが、その場合はスクリプトの先頭に実効ユーザーがrootかどうかをチェックする処理を挟んでおくと「このスクリプトはroot権限でしか実行できないよ」という意思が明確になるので、おそらくそんなスクリプトを書いたことすら忘れている未来の自分にとって親切である。

## bashの場合

bashでは[シェル変数](https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html)EUIDに実効ユーザーIDが格納されているのでそれがゼロ(つまりroot)かどうかチェックする。

```sh
#!/bin/bash
if [ "$EUID" -ne 0 ]; then
  # rootユーザーにしか実行させない
  echo "Please run as root"
  exit 1
fi

# ここからなんか処理...
```

## bashの機能に依存したくない場合

変数EUIDはbash固有の機能なので、他のBシェルでは ```id -u``` コマンド([man](https://linuxjm.osdn.jp/html/GNU_coreutils/man1/id.1.html))の実行結果を使用してチェックを行う。

```sh
#!/bin/sh
if [[ `id -u` -ne 0 ]]; then
  # rootユーザーにしか実行させない
  echo "Please run as root"
  exit 1
fi

# ここからなんか処理...
```

参考: [Stack Overflow](https://stackoverflow.com/questions/18215973/how-to-check-if-running-as-root-in-a-bash-script)
