シェルスクリプトで現在のユーザーが rootかどうかチェックする

root権限がないと実行できない処理を含むスクリプトは間違えて一般ユーザーで実行しないようにしておく

シェルスクリプトで現在のユーザーが rootかどうかチェックする

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

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

bashの場合

bashではシェル変数EUIDに実効ユーザーIDが格納されているのでそれがゼロ(つまりroot)かどうかチェックする。

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

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

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

変数EUIDはbash固有の機能なので、他のBシェルでは id -u コマンド(man)の実行結果を使用してチェックを行う。

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

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

参考: Stack Overflow

当社代表のデスクトップ(※)を常時ライブ配信中

※ライブ配信専用PC

OSSの検証や自社用ツールの開発といった公開できる作業に限り、 ライブ配信専用PC上で行っています。常時配信ですのでいつでもお気軽にチャットメッセージ(公開)を残していって下さい。