If - Elseステートメント:ユーザーが管理者であることを確認する

If - Elseステートメント:ユーザーが管理者であることを確認する
read -p "What is your name?:" ANSWER
if ["$ANSWER" == "root"]
    then
        echo "Hello, administrator"
    else
        echo "Hello, $ANSWER" 
fi

コンソールで「root」と答えると、「Hello Admin」が表示されると仮定しますが、常に2番目のケースが表示されます。私は何が間違っていましたか? [また、"$ANSWER" = "myname"のような他のif条件を試しましたが、まだ動作しません。] よろしくお願いします!

ベストアンサー1

コードに構文の問題があります。テスト[の前後にスペースが必要です。]

read -p "What is your name?:" ANSWER

if [ "$ANSWER" == "root" ]; then
    echo 'Hello, administrator'
else
    printf 'Hello, %s\n' "$ANSWER"
fi

idまた、このユーティリティを使用してユーザーのUIDを取得することもできます。 root ユーザーの UID は常に 0 です。

if [ "$(id -u)" -eq 0 ]; then
    echo 'Hello, administrator'
else
    printf 'Hello, %s\n' "$(id -u -n)"
fi

id -u現在のユーザーのUIDが正の整数で返され、id -u -nユーザー名が返されます。ユーザー名を使用$USERまたは印刷することもできますが、$LOGNAME比較時にUID(数値)を使用する方が安全です。

シェルはbash現在のユーザーのUIDをに保存するため、$UIDbashのものを作成できます。

if [ "$UID" -eq 0 ]; then
    echo 'Hello, administrator'
else
    printf 'Hello, %s\n' "$USER"
fi

おすすめ記事