![csh 쉘 명령 프롬프트에서 while 루프를 사용하는 방법은 무엇입니까?](https://linux55.com/image/118008/csh%20%EC%89%98%20%EB%AA%85%EB%A0%B9%20%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EC%97%90%EC%84%9C%20while%20%EB%A3%A8%ED%94%84%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
RHEL 7.2의 셸 명령 프롬프트에서 while 루프를 사용해 보았지만 csh
다음 오류가 발생했습니다.
$ while true
while: Expression Syntax.
bash
쉘에서도 마찬가지입니다.
답변1
while
루프 인 구문은 csh
Bourne과 같은 쉘의 구문과 다릅니다. 그것은:
while (arithmetic-expression)
body
end
csh
end
대화형일 때는 어떤 이유에서 인지 한 줄에 그 자체로 나타나야 합니다 .
~을 위한산술 표현명령이 성공했는지 테스트하려면 { cmd }
(필요한 공백)이 필요합니다. { cmd }
산술 표현식은 명령이 성공하면(0 종료 상태로 종료) 1로 평가되고, 그렇지 않으면 0(명령이 0이 아닌 종료 상태로 종료된 경우)으로 평가됩니다.
그래서:
while ({ true })
body
end
그러나 이는 다소 어리석은 일입니다. 특히 이것이 무한 루프의 경우 다음을 true
사용 csh
하는 것이 좋습니다.
while (1)
body
end
대조적으로 POSIX 셸의 구문은 다음과 같습니다.
while cmd; do
body
done
산술 표현식을 조건부로 평가하려면 이를 평가하는 명령(예 : 산술 확장 과 결합된 expr
또는 ksh
/ let
또는 ((...))
/ test
명령) 을 실행해야 합니다.[
$((...))
답변2
set i = 1
while ($i < 5)
echo "i is $i"
@ i++
end
또는
set i = 1
while (1)
echo "i is $i"
@ i++
if ($i >= 5) break
end
다음 출력은 다음과 같습니다.
i is 1
i is 2
i is 3
i is 4
csh
이제 특히 Linux 플랫폼에서 -shell로 대체되었습니다( sh
처음부터 널리 사용되지 않았습니다). 대부분의 BSD는 기본 대화형 셸로 호환 가능한 셸 csh
도 제공합니다 .sh
sh
쉘 프로그래밍을 배우고 있는 경우 작업에서 grok csh
및 스크립트가 필요한 경우를 제외하고 쉘 학습을 고려하십시오 tcsh
(이 경우 사용하는 스크립트 종류에 관계없이 sh
예를 들어 쉘을 대화형 쉘로 사용할 수 있음).bash
답변3
이 시도,
csh shell
, man while
페이지 에서
set x 0
while {$x<10} {
puts "x is $x"
incr x
}