if, ellif, else 문 문제가 Bash에 있습니다.
다음의 문제가 무엇인지 알 수 없는 것 같습니다.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 ]; then
# Things
elif [ other_conditions ]; then
# Other things
else
# In case none of the above occurs
fi
이 질문은 많은 사람들의 의견을 얻고 있기 때문에 다음 구문을 따라야 한다는 것을 나타내는 것이 중요합니다.
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에서 컨디셔닝의 기초를 보는 것을 추천합니다.
"["] 기호는 명령이며 명령 앞에는 공백이 있어야 합니다.ellif 뒤에 공백을 지정하지 않으면 시스템은 ellif[를 특정 명령으로 해석합니다. 이 명령은 현재 사용자가 원하는 것이 아닙니다.
용도:
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 if if 문과 관련된 유용한 링크
언급URL : https://stackoverflow.com/questions/16034749/if-elif-else-statement-issues-in-bash
'programing' 카테고리의 다른 글
작성자를 위해 모든 지점의 로그를 한 번에 가져오는 방법은 무엇입니까? (0) | 2023.05.06 |
---|---|
'batch3'이(가) 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다. (0) | 2023.05.06 |
Excel VBA, 비활성 시트에서 범위 가져오기 (0) | 2023.05.06 |
내가 개발 중인 iOS 애플리케이션이 워크스테이션에서 장치에 생성한 파일을 탐색하시겠습니까? (0) | 2023.05.06 |
PostgreSQL에서 테이블의 목록 열 이름과 데이터 유형을 가져오는 방법은 무엇입니까? (0) | 2023.05.06 |