5 분의 카운트 다운을 원하고 매초마다 업데이트하고 같은 줄에 결과를 표시하고 싶습니다. Bash 스크립팅으로도 가능합니까?
카운트 다운은 무엇을합니까? 모든 것에 대해 좀 더 구체적이어야합니다.
—
Adrian Frühwirth
5 분의 카운트 다운을 원하고 매초마다 업데이트하고 같은 줄에 결과를 표시하고 싶습니다. Bash 스크립팅으로도 가능합니까?
답변:
이것은 Bash 쉘에서 작동합니다.
secs=$((5 * 60))
while [ $secs -gt 0 ]; do
echo -ne "$secs\033[0K\r"
sleep 1
: $((secs--))
done
특수 문자 \ 033 [OK] 는 이전 출력에서 남은 문자가있는 경우 나머지 행을 정리하는 행의 끝을 나타내고 \ r 은 커서를 행의 시작으로 이동시키는 캐리지 리턴입니다. stackoverflow.com 에는이 기능에 대한 유용한 정보가 있습니다 .
while 루프에서 자체 명령 또는 무엇이든 추가 할 수 있습니다. 좀 더 구체적인 것이 필요하면 자세한 내용을 알려주십시오.
\r
(이 첫 번째 문자를 숨기기 위해 방지) 라인의 끝 부분에 커서를 넣어 시작 부분에. 업데이트 된 버전은 다음과 같습니다. gist.github.com/boillodmanuel/676b3af823fae4177f1d0b41a6f23442 감사
올바른 선행 0과 지원 시간으로 올바른 출력 형식 (HH : MM : SS)이 개선 된 항목은 다음과 같습니다.
#!/bin/bash
m=${1}-1 # add minus 1
Floor () {
DIVIDEND=${1}
DIVISOR=${2}
RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} ))
echo ${RESULT}
}
Timecount(){
s=${1}
HOUR=$( Floor ${s} 60/60 )
s=$((${s}-(60*60*${HOUR})))
MIN=$( Floor ${s} 60 )
SEC=$((${s}-60*${MIN}))
while [ $HOUR -ge 0 ]; do
while [ $MIN -ge 0 ]; do
while [ $SEC -ge 0 ]; do
printf "%02d:%02d:%02d\033[0K\r" $HOUR $MIN $SEC
SEC=$((SEC-1))
sleep 1
done
SEC=59
MIN=$((MIN-1))
done
MIN=59
HOUR=$((HOUR-1))
done
}
Timecount $m
다음과 같은 출력을 제공합니다.
02:04:15
HH:MM:SS
. 한 자리 분 또는 초 동안을 볼 수 있습니다 00:4:5
.