![제가 만들고 있는 가위바위보 게임의 elif 문에 뭔가 문제가 있는 걸까요?](https://linux55.com/image/9129/%EC%A0%9C%EA%B0%80%20%EB%A7%8C%EB%93%A4%EA%B3%A0%20%EC%9E%88%EB%8A%94%20%EA%B0%80%EC%9C%84%EB%B0%94%EC%9C%84%EB%B3%B4%20%EA%B2%8C%EC%9E%84%EC%9D%98%20elif%20%EB%AC%B8%EC%97%90%20%EB%AD%94%EA%B0%80%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EC%9E%88%EB%8A%94%20%EA%B1%B8%EA%B9%8C%EC%9A%94%3F.png)
Bash를 더 잘 배우려면 가위바위보 게임을 만들어 보세요. 어떤 이유로 그것은 내 elif 진술을 좋아하지 않으며 그 이유를 이해하지 못합니다. 그리고 더 좋은 방법이 있으면 알려주시면 감사하겠습니다!
#!/bin/bash
#rock beats scissors, scissors beats paper, paper beats rock,
printf "Welcome to rock paper scissors. Type 'r', 'p', or 's' to start: "
#get users selection
read user
#detect input and assign it to a num that will be used to check against computer.
if [[ $user == [rR] || $user == "Rock" || $user == "rock" ]]
then
user="r"
elif [[ $user == [sS] || $user == "scissors" || $user == "Scissors" ]]
then
user="s"
elif [[ $user == [pP] || $user == "paper" || $user == "Paper" ]]
then
user="p"
else
printf "Not a valid submission, you entered: $user\n"
fi
#get random number between 1 and 9
comp=$(shuf -i 1-9 -n 1)
#detect what number it was and assign either r p s to it.
if ((1<=$comp && $comp<=3))
then
comp="r"
printf "Rock\n"
elif ((4<=$comp && $comp<=6))
then
comp="s"
printf "Scissors\n"
elif ((6<=$comp && $comp<=9))
then
comp="p"
printf "Paper\n"
else
echo "not in range?"
fi
#find out who won
if [[ $user == $comp ]]
then
echo "same!"
elif [[ $user == "r" && $comp == "p" ]]
echo "user rock comp paper COMP WINS"
elif [[ $user == "p" && $comp == "r" ]]
echo "comp rock user paper USER WINS"
elif [[ $user == "s" && $comp == "r" ]]
echo "user scissors comp rock COMP WINS"
elif [[ $user == "r" && $comp == "s" ]]
echo "user rock comp scissors USER WINS"
elif [[ $user == "p" && $comp == "s" ]]
echo "user paper comp scissors COMP WINS"
elif [[ $user == "s" && $comp == "p" ]]
echo "user scissors comp paper USER WINS"
else
echo "something is borked"
fi
다음 오류가 발생합니다.
./rps.sh: line 49: syntax error near unexpected token `elif'
./rps.sh: line 49: `elif [[ $user == "p" && $comp == "r" ]]'
답변1
이와 같은 작업을 수행하는 더 읽기 쉬운 방법은 case
명령문을 사용하는 것입니다.
move=''
while [[ -z "$move" ]]; do
echo "Please specify paper, scissors, or rock. >"
read userinput
case "$userinput" in
[Rr]*)
move="rock"
;;
[Pp]*)
move="paper"
;;
[Ss]*)
move="scissors"
;;
*)
echo "Invalid input."
;;
esac
done
무작위로 선택된 컴퓨터 플레이어의 움직임으로 비슷한 작업을 수행하고 결과를 결정할 수 있습니다.