条件文でスクリプトを終了するには?

条件文でスクリプトを終了するには?

bashスクリプトを作成していますが、ユーザーがrootでない場合はスクリプトを終了したいと思います。条件は正常に実行されますが、スクリプトは終了しません。

[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)

&&代わりに試してみましたが、;どちらも機能しません。

答え1

次のことができます。

[[ $(id -u) -eq 0 ]] || { echo >&2 "Must be root to run script"; exit 1; }

(最初のステートメントに算術バイナリ演算子を含む「一般」条件式)または:

(( $(id -u) == 0 )) || { echo >&2 "Must be root to run script"; exit 1; }

(最初のテストの算術評価)。

変更()-> {}-bracesに注意してください。いいえサブシェルを作成します。 (「サブシェル」を検索してくださいman bash。)

答え2

このコマンドの周りの括弧はサブシェル。サブシェルは、「スクリプトを実行するにはルートである必要があります」というメッセージを表示し、次のように言います。サブシェル終了します(もうコマンドがないため、すでに終了していますが)。おそらくこの問題を解決する最も簡単な方法は、次のものを使用することですif

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi

答え3

そして強く打つ:

[ $UID -ne 0 ] && echo "Must be root to run script" && exit 1

答え4

これはbashで役に立ちます

[oracle@rac1 ~]$ which bash
/bin/bash
[oracle@rac1 ~]$ cat test1.sh
if [ `id -u` != 0 ]
then
echo "Must be root to run the script
 "
exit
fi

関連情報