sh 스크립트의 "fi" 오류

sh 스크립트의 "fi" 오류

나는 Linux vi에서 크랩스 게임을 만들려고 노력했지만 그것을 알아낼 수 없는 것 같습니다. 오류라고 말하면서 "if" 문을 "fi"로 끝낼 수 없습니다. 왜 이런가요? 1-6 사이의 난수 두 개를 생성해야 하며, 그 숫자가 추가되면 승리하거나 패배하거나 점수를 얻습니다. 도움이 필요하세요?

내가 시도한 것은 다음과 같습니다.

# craps.sh program inn bash shell
# $RANDOM returns a different random integer at each invocation.
# generate_random_number function which returns sum of
# 2 random number between 1 and 6
generate_random_number()
{
    RANGE=6
    #get 2 random numbers
    number1=$RANDOM
    number2=$RANDOM

    # get it between 1 and 6
    number1=$((($number1%$RANGE)+1))
    number2=$((($number2%$RANGE)+1))

    echo number 1 is $number1
    echo number 2 is $number2

    # add 2 numbers
    sum=$(($number1+$number2))
    echo sum is $sum

    #return the sum
    return $sum

}

# play_game() function invoked whenever user wants to play

play_game(){
    # first throw
    generate_random_number
    sum=$?
    # check if win or lost
    if(($sum==2 || $sum==3 || $sum==12))
    then
        # lost then subtract wager from total amount
        amount=$(($amount-$wager))
        echo You Lost $wager$

    fi

답변1

이것은 vi와 아무 관련이 없습니다.

"if" 뒤에는 공백이 필요합니다.

쉘 프로그래밍 튜토리얼을 읽어보세요.

당신은 또한 사용해야합니다https://www.shellcheck.net/

답변2

쉘 프로그래밍의 경우 이 return명령은 다음을 전달하는 데 사용됩니다.상태대신 기능. 값은 stdin 및 stdout을 통해 전달됩니다. 이는 디버그/자세한 메시지가 stderr에 인쇄되어야 함을 의미합니다.

roll_dice() {
    local range=6
    local sum=0

    # add 2 random numbers
    for i in {1..2}; do
        (( sum += (RANDOM % range) + 1 ))
    done

    # "diagnostic" output to stderr
    echo "sum is $sum" >&2

    # values returned on stdout
    echo "$sum"
}

그럼 당신은 할

play_game() {
    # first throw
    # capture the value using command substitution
    sum=$( roll_dice )

진단 출력을 삭제하려면 다음을 수행하십시오.

    sum=$( roll_dice  2>/dev/null )

노트:

  • 일관성은 읽기 쉬운 코드의 핵심입니다. 여는 중괄호를 새 줄이나 같은 줄에 배치하되, 둘 다 배치하면 안 됩니다.
  • 변수 이름을 모두 대문자로 사용하지 마십시오. 변수 이름을 쉘용으로 예약해 두십시오.
  • Bash 산술 표현식에서는 $변수가 필요하지 않습니다.

답변3

이므로 bash스크립트 끝에 뭔가가 누락되었습니다.

[...]
        amount=$(($amount-$wager))
        echo You Lost $wager$
    fi
# close function
}  
# get a wager
read -p "Enter wager " wager
# validate and call play_game()
((wager>0)) && play_game || echo "Invalid wager: $wager"

이것은 TIO에 있습니다:

온라인으로 사용해 보세요!

관련 정보