csh 쉘 명령 프롬프트에서 while 루프를 사용하는 방법은 무엇입니까?

csh 쉘 명령 프롬프트에서 while 루프를 사용하는 방법은 무엇입니까?

RHEL 7.2의 셸 명령 프롬프트에서 while 루프를 사용해 보았지만 csh다음 오류가 발생했습니다.

$ while true
while: Expression Syntax.

bash쉘에서도 마찬가지입니다.

답변1

while루프 인 구문은 cshBourne과 같은 쉘의 구문과 다릅니다. 그것은:

while (arithmetic-expression)
  body
end

cshend대화형일 때는 어떤 이유에서 인지 한 줄에 그 자체로 나타나야 합니다 .

~을 위한산술 표현명령이 성공했는지 테스트하려면 { 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
}

관련 정보