read -p "What is your name?:" ANSWER
if ["$ANSWER" == "root"]
then
echo "Hello, administrator"
else
echo "Hello, $ANSWER"
fi
콘솔에서 "root"라고 대답하면 "Hello Admin"이 표시될 것이라고 가정하지만 항상 두 번째 사례가 표시됩니다. 내가 뭘 잘못했나요? [또한 "$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를 가져올 수도 있습니다 . 루트 사용자의 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를 에 저장하므로 $UID
에서 bash
다음을 작성할 수 있습니다.
if [ "$UID" -eq 0 ]; then
echo 'Hello, administrator'
else
printf 'Hello, %s\n' "$USER"
fi