[bash] Bash에서 elif, else 문이 있으면

다음 if문과 관련된 문제가 elif및 에 관한 문제를 해결할 수없는 것 같습니다 then. printf아직 개발 중이므로 명언에서 아직 테스트 할 수 없었으므로 잘못되었을 가능성이 있습니다.

내가 얻는 오류는 다음과 같습니다.

./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'

그리고 그 진술은 그렇습니다.

if [ "$seconds" -eq 0 ];then
   $timezone_string="Z"
elif[ "$seconds" -gt 0 ]
then
   $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
else
   echo "Unknown parameter"
fi



답변

elif와 사이에 공백이 없습니다 [.

elif[ "$seconds" -gt 0 ]

해야한다

elif [ "$seconds" -gt 0 ]

이 질문이 많은 견해를 얻고 있음을 알 때 따라야 할 구문은 다음과 같습니다.

if [ conditions ]
# ^ ^          ^

괄호 주위에 공백이 필요하다는 의미입니다 . 그렇지 않으면 작동하지 않습니다. [그 자체 명령 이기 때문 입니다.

이 같은보고되지 않은 이유 elif[: command not found(유사한 또는)보고 후 것입니다 if그리고 then, 쉘이 중 하나를 찾고 elif, else또는 fi. 그러나 다른 then형식을 찾습니다 (잘못된 형식의 elif[). 명령문을 구문 분석 한 후에 만 명령문이 실행됩니다 (오류 메시지 elif[: command not found가 출력됩니다).


답변

스크립트에 구문 문제가 있습니다. 고정 버전은 다음과 같습니다.

#!/bin/bash

if [ "$seconds" -eq 0 ]; then
   timezone_string="Z"
elif [ "$seconds" -gt 0 ]; then
   timezone_string=$(printf "%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
   echo "Unknown parameter"
fi


답변

[명령 (또는 일부 쉘에 내장되어 있음)입니다. 앞의 문장에서 공백으로 구분해야합니다.

elif [


답변

bash에서 컨디셔닝의 기본 사항을 살펴 보는 것이 좋습니다.

“[“ 기호 는 명령이며 그 앞에 공백이 있어야합니다. elif 뒤에 공백을주지 않으면 시스템은 elif [를 현재 원하는 것이 아닌 특정 명령으로 해석 합니다.

용법:

elif(A COMPULSORY WHITESPACE WITHOUT PARENTHESIS)[(A WHITE SPACE WITHOUT PARENTHESIS)conditions(A WHITESPACE WITHOUT PARENTHESIS)]

요컨대, 코드 세그먼트를 편집하여 다음을 수행하십시오.

elif [ "$seconds" -gt 0 ]

컴파일 오류없이 괜찮을 것입니다. 최종 코드 세그먼트는 다음과 같아야합니다.

#!/bin/sh    
if [ "$seconds" -eq 0 ];then
       $timezone_string="Z"
    elif [ "$seconds" -gt 0 ]
    then
       $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
    else
       echo "Unknown parameter"
    fi


답변

프로그램 사이에 공간이 elif없고 [휴식을 취하십시오. 확인 후 수정해야합니다. 여기에 고정 된 프로그램이 있습니다 :

#!/bin/bash

if [ "$seconds" -eq 0 ]; then
   timezone_string="Z"
elif [ "$seconds" -gt 0 ]; then
   timezone_string=$(printf "%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
   echo "Unknown parameter"
fi

그렇지 않으면bash 와 관련된 유용한 링크


답변