세미콜론 및 / 또는 중괄호의 올바른 조합을 만드는 데 문제가 있습니다. 나는 이것을하고 싶지만 커맨드 라인에서 하나의 라이너로 :
while [ 1 ]
do
foo
sleep 2
done
세미콜론 및 / 또는 중괄호의 올바른 조합을 만드는 데 문제가 있습니다. 나는 이것을하고 싶지만 커맨드 라인에서 하나의 라이너로 :
while [ 1 ]
do
foo
sleep 2
done
답변:
while true; do foo; sleep 2; done
그건 그렇고, 명령 프롬프트에서 여러 줄로 표시하고 (위로 표시) 화살표를 사용하여 기록을 호출하면 정확하게 한 줄로 표시됩니다.
$ while true
> do
> echo "hello"
> sleep 2
> done
hello
hello
hello
^C
$ <arrow up> while true; do echo "hello"; sleep 2; done
cmdhist
bash를 사용하는 경우 옵션을 확인 하시겠습니까?
while true; do sh /Users/myuser/bin/vpn ; done
상태에서 수면 명령을 사용할 수도 있습니다. 하나의 라이너를 더 깨끗하게 보이게 만듭니다.
while sleep 2; do echo thinking; done
while echo thinking ; do sleep 2 ; done
물론 [while] 명령이 실패하면 루프가 종료되므로 while echo thinking || true ; do sleep 2 ; done
다시 돌아 가야합니다.while true ; ...
콜론은 항상 "참"입니다 :
while :; do foo; sleep 2; done
: [arguments]
효과가 없습니다. 이 명령은 인수를 확장하고 지정된 리디렉션을 수행하는 것 외에는 아무 것도 수행하지 않습니다. 종료 코드 0이 리턴됩니다.
세미콜론을 사용하여 명령문을 분리 할 수 있습니다.
$ while [ 1 ]; do foo; sleep 2; done
until
명령 을 사용할 수도 있습니다 .
until ((0)); do foo; sleep 2; done
대조적으로 해당 주 while
, until
긴 테스트 조건이 0이 아닌 이탈 상태 인만큼 루프 내부의 명령어를 실행할 것이다.
while
루프 사용하기 :
while read i; do foo; sleep 2; done < /dev/urandom
for
루프 사용하기 :
for ((;;)); do foo; sleep 2; done
다른 방법으로 until
:
until [ ]; do foo; sleep 2; done
until ((0)); do foo; sleep 2; done
작동하지 않습니다. 그것은 계속 무한합니다.
나는 세미콜론을 WHILE 문에만 사용하고 && 연산자는 루프가 두 가지 이상의 작업을 수행하도록하고 싶습니다 ...
그래서 나는 항상 이렇게 이렇게
while true ; do echo Launching Spaceship into orbit && sleep 5s && /usr/bin/launch-mechanism && echo Launching in T-5 && sleep 1s && echo T-4 && sleep 1s && echo T-3 && sleep 1s && echo T-2 && sleep 1s && echo T-1 && sleep 1s && echo liftoff ; done
&&
루프에서 의 사용은 다른 시간과 동일합니다. 첫 번째 경우에만 두 번째 일이 발생 하면 &&
다른 것을 사용하십시오 ;
. 실제로, 루프의 내용을 짧고 간단하게, 이상적으로는 하나의 명령, 즉 함수 또는 스크립트를 유지하려고합니다.
foo
조건이 충족 된 후 while 루프를 중지 하고이 조건이 충족 될 때 명령이 0이 아닌 값을 반환하면 다음과 같이 루프가 중단 될 수 있습니다.
while foo; do echo 'sleeping...'; sleep 5; done;
예를 들어 foo
명령이 배치에서 항목을 삭제하는 경우 삭제할 항목이 없으면 1을 리턴합니다.
이것은 어떤 조건까지 명령을 여러 번 실행해야하는 사용자 지정 스크립트가있는 경우에 효과적입니다. 1
조건이 충족되면 종료 할 스크립트를 작성 하고 종료합니다0
되면 다시 실행해야 할 때 합니다.
예를 들어, batch_update.py
데이터베이스에서 100 개의 행 0
을 업데이트하고 업데이트 1
할 것이 더 있고없는 경우 를 반환 하는 python 스크립트가 있다고 가정하십시오 . 다음 명령을 사용하면 업데이트 사이에 5 초 동안 휴면 상태에서 한 번에 100 행을 업데이트 할 수 있습니다.
while batch_update.py; do echo 'sleeping...'; sleep 5; done;
foo
코드로 종료 명령을 1
사용하면 while 루프가 중단하고자 할 때. 예를 들어 답변을 업데이트했습니다.
두 가지 실제적인 예를들 수 있다면 ( "감정").
"img"폴더에 ".jpg"로 끝나는 모든 파일의 이름이 기록됩니다.
for f in *; do if [ "${f#*.}" == 'jpg' ]; then echo $f; fi; done
삭제합니다 :
for f in *; do if [ "${f#*.}" == 'jpg' ]; then rm -r $f; fi; done
그냥 공헌하려고합니다.
ls -1 *.jpg
및rm *.jpg
당신도 이것을 시도 할 수 있습니다 경고 : 이것은 당신이해서는 안되지만 질문은 무한 루프를 요구하기 때문에 끝이 없습니다 ... 이것이 당신이 그것을 할 수있는 방법입니다.
while [[ 0 -ne 1 ]]; do echo "it's looping"; sleep 2; done